如何在窗口失去焦点时更新TextBox的值?

时间:2016-03-16 14:47:19

标签: c# .net wpf textbox user-controls

上下文

<TextBox Text="{Binding Value, UpdateSourceTrigger=LostFocus}"/>

TextBox控件有一个名为UpdateSourceTrigger的绑定选项,默认情况下设置为LostFocus。但是,当TextBox在其自己的Window 中失去焦点时,这仅适用于。即使整个所有者窗口失去焦点,我也要求更新绑定。

可能的解决方案?

现在,Window.Deactivated事件似乎做得很好。

<Window x:Class="MyWindow" Deactivated="OnDeactivated">

关于问题

话虽如此,TextBox如何监听其父窗口的Window.Deactivated事件,因为TextBox存在于几层UserControl对象下。

Window --> UserControl --> UserControl --> TextBox

如何让事件从窗口向下从Window到TextBox? ( ie:让TextBox监听Window.Deactivated事件

或许那里有更好的解决方案?

3 个答案:

答案 0 :(得分:1)

为什么不在窗口类中添加窗口取消激活事件的处理程序,然后(在处理程序中)更新usercontrol(给它一个Update方法或其他东西)?

答案 1 :(得分:0)

您可以使用自定义行为类来实现此功能

public class CustomBehavior : Behavior<UIElement>
{
//use the override the OnAttached()
}

答案 2 :(得分:0)

WPF 4.5现在支持延迟绑定。结合PropertyChanged,这意味着一旦用户完成输入,该值将被更新,但是在延迟X毫秒之后。漂亮的,对吧?

Text="{Binding Value, UpdateSourceTrigger=PropertyChanged, Delay=2000}"/>