参考一些资料,可在xaml最高层中增加鼠标事件、在鼠标点下后强行将焦点给到一个没用的TextBox,正在编辑的TextBox就可以失去焦点了。
<Windows MouseDowm="MouseDown"
PreviewMouseDown="PreviewMouseDown">
<TextBox x:Name="tb" Height="0" Width="0"/>
...
</Windows>
private void PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
tb.Focus();
base.OnPreViewMouseDown(e);
}
private void UserControl_MouseDown(object sender, MouseButtonEventArgs e)
{
tb.Focus();
base.OnMouseDown(e);
}
后续发现,如果Windows下有Combobox时,使用PreviewMouseDown会出现无法选中Combobox选项的问题,猜测可能是还没到给Combobox的SelectedItem赋值的时间、隧通事件已经将焦点转移,导致Combobox在被赋值SelectedItem时出现错误;改为冒泡事件MouseDown即可。