在下面的简单WPF应用程序中,将TextBox
设置为当焦点从该控件失去焦点时更新属性,像这样
<DockPanel>
<ToolBar DockPanel.Dock="Top">
<Button>Test</Button>
</ToolBar>
<TextBox Text="{Binding MyString}" />
</DockPanel>
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public string MyString
{
get { return _myString; }
set { _myString = value; }
}
但是,当我运行此应用程序时,请在文本框中输入一些文本,然后单击“测试”按钮。MyString
属性上的断点被引发为[[not,也为FocusLost
提供了任何事件处理程序。事件也未引发。仅当通过某些其他方式使控件失去焦点时,才会引发这些事件(例如,关闭窗口)。
MyString
属性被更新的逻辑。如何确保在单击“测试”按钮时正确引发FocusLost
事件并更新绑定?看起来问题似乎是由ToolBar
的使用引起的,因为用标准按钮替换ToolBar
不会导致此行为。
<TextBox Text="{Binding Test}" LostKeyboardFocus="UIElement_OnLostKeyboardFocus" local:MainWindow.BindOnLostKeyboardFocus="True" />