代码之家  ›  专栏  ›  技术社区  ›  Drake

如何在WPF文本框上强制一个TextChanged事件并保持焦点?

  •  8
  • Drake  · 技术社区  · 16 年前

    我正在创建一个数字文本框 WPF ,使用两个按钮来增加和减少值。

    我创造了两个 路由命令 管理好环境,他们工作得很好。我只想解决一个问题。我希望控件通知绑定到它的 文本属性 执行递增或递减命令时。

    现在它发送通知 只有当我将焦点切换到另一个控件时

    任何帮助都非常感谢, 谢谢你

    3 回复  |  直到 10 年前
        1
  •  12
  •   Noctis    10 年前

    使用 UpdateSourceTrigger="Explicit" 在装订和 TextChanged 事件更新 BindingSource . 所以你写的东西是这样的:

    <NumericTextBox x:Name="control" Text={Binding Path=MyProperty}/>
    

    而是这样做

    <NumericTextBox x:Name="control" Text={Binding Path=MyProperty, UpdateSourceTrigger=Explicit}/>
    

    而在 事件 事件处理程序更新绑定。

    control.GetBindingExpression(NumericTextBox.TextProperty).UpdateSource();
    

    完成了。 希望有帮助!!

        2
  •  29
  •   Shaipod    15 年前

    有一个简单的方法:

    Text="{Binding Path=MyProperty, UpdateSourceTrigger=PropertyChanged}"
    

    (我在文本框上测试了它)。 祝你好运

        3
  •  2
  •   Abe Heidebrecht    16 年前

    文本属性绑定的默认行为 TextBox 将在上更新 LostFocus . 您可以在自定义控件中通过重写 TextProperty 在静态ctor中:

    static NumericTextBox()
    {
        TextProperty.OverrideMetadata(
            typeof(NumericTextBox),
            new FrameworkPropertyMetadata("", // default value
                FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
                null,  // property change callback
                null,  // coercion callback
                true,  // prohibits animation
                UpdateSourceTrigger.PropertyChanged));
    }