我有一个TextBox
和一个ToolBar
和一个Button
。如果我输入TextBox
并单击Button
,我希望TextBox
丢失Focus
,以便更新绑定。我不想将UpdateSourceTrigger=PropertyChanged
添加到我的TextBox
。但是,当我点击Button
时,我将Focus
重置到主窗口,这样我所使用的东西就会丢失Focus
并更新绑定。
我试着用下面的代码给按钮添加一个OnClick
,但似乎不起作用:
private void Button_Click(object sender, RoutedEventArgs e) {
FocusManager.SetFocusedElement(this, null);
}
字符串
任何提示将不胜感激。
谢谢,劳尔
4条答案
按热度按时间ego6inou1#
我遇到了类似的问题。我需要在按回车键时取消文本框的焦点。最后得到这样的代码:
字符串
我认为它比创建虚拟控件更干净,并且可以重复使用。但我对这个解决方案没有信心。但似乎效果不错。
ndasle7k2#
问题是工具栏将您的按钮放置在不同的
FocusManager.FocusScope
中。这意味着Button
和TextBox
可以同时接收逻辑焦点,每个都在自己的范围内。这通常是一件好事,因为您通常不希望在选择菜单项和工具栏按钮时失去主窗口区域的焦点,但在您的情况下,它会阻止您正在执行的操作。虽然你可以覆盖工具栏上的
FocusManager.IsFocusScope
属性并获得你想要的效果,但这可能不是最好的计划,因为它会使所有其他工具栏按钮也从主窗口区域窃取焦点。相反,您可以使用以下几种简单的解决方案之一:
textBox.GetBindingExpression(TextBox.TextProperty).UpdateSource()
手动强制更新z9smfwbn3#
我在离开日历时遇到了一个问题,需要点击两次按钮(WPF,.Net 5.0),我尝试了上面建议的一些解决方案,但没有运气,但是这起作用了-引用了微软网站上的某人的话:
“我解决这个问题的方法是插入到主窗体中,但这可能有点矫枉过正。”
字符串
oaxa6hgo4#
我的按钮保持焦点,即使我有样式触发器作为应用程序资源,用于鼠标悬停true/false和isfocused true/false。尝试了以上所有方法,感谢维斯Studio中的新功能,它可以访问Github示例,发现这个片段
e.Handled = true;
工作得很好。