如果用户点击不可聚焦的内容,如何使控件失去焦点?

时间:2010-02-19 19:14:39

标签: c# wpf binding focusable

我有一个装满了几十件物品的ItemsControl;每个项目都是一个绑定的文本框和几个按钮。因为我希望用户能够从文本框到文本框,所以按钮的Focusable设置为False。这很好用。唯一的问题是,由于文本框没有失去焦点,它们的绑定不会更新源,因此按钮后面的代码无法使用正确的值。

我可以想办法解决这个问题,例如:使用按钮的Click处理程序将逻辑树导航到其关联的文本框,并使绑定更新源明确。但在我看来,必须有一个更好的方法,如果我对焦点模型有更好的理解,这对我来说可能是显而易见的。有吗?

2 个答案:

答案 0 :(得分:1)

如果性能允许,您可以将这些TextBox元素的UpdateSourceTrigger更改为PropertyChanged而不是LostFocus

答案 1 :(得分:1)

由于性能存在问题,您可能会发现article written by Josh Smith很有用。上下文与您的问题非常相似。 Josh通过手动触发绑定更新来解决它:

    TextBox focusedTextBox = Keyboard.FocusedElement as TextBox;
    if (focusedTextBox == null)
        return;

    BindingExpression textBindingExpr = 
      focusedTextBox.GetBindingExpression(TextBox.TextProperty);
    if (textBindingExpr == null)
        return;

    textBindingExpr.UpdateSource();
相关问题