我注意到,当用户激活菜单或工具栏时,不会更新与UpdateSourceTrigger==LostFocus
的绑定。使用UpdateSourceTrigger绑定== LostFocus不为菜单或工具栏交互触发
这会导致不幸的情况,即当用户从菜单或工具栏中选择“保存文件”时,用户所做的最后更改会丢失。
有没有一个简单的方法或我必须改变我所有的绑定到UpdateSourceTrigger=PropertyChanged
。
我注意到,当用户激活菜单或工具栏时,不会更新与UpdateSourceTrigger==LostFocus
的绑定。使用UpdateSourceTrigger绑定== LostFocus不为菜单或工具栏交互触发
这会导致不幸的情况,即当用户从菜单或工具栏中选择“保存文件”时,用户所做的最后更改会丢失。
有没有一个简单的方法或我必须改变我所有的绑定到UpdateSourceTrigger=PropertyChanged
。
问题是,TextBox的确,而不是当菜单项被激活时失去焦点。因此,UpdateSourceTrigger LostFocus
不会触发。根据您的(查看)模型,UpdateSourceTrigger PropertyChanged
可能或可能不是一种可行的解决方法。
对于我来说,PropertyChanged
不是一种选择(我需要完成进入它,而不是在用户间后验证数据),所以我通过调用之前“保存文件”这种方法使用一种变通方法(或任何一个需要跟上时代的模式等菜单/工具栏项):
Public Shared Sub SaveFocusedTextBox()
Dim focusedTextBox = TryCast(Keyboard.FocusedElement, TextBox)
If focusedTextBox IsNot Nothing Then
Dim be = focusedTextBox.GetBindingExpression(TextBox.TextProperty)
If be IsNot Nothing Then be.UpdateSource()
End If
End Sub
对这个问题的一些其他方法可以在此相关的问题中找到:
(事实上,信贷这种方法去在这个问题rudigrobler的答案。)
这很适合我:
Private Sub MenuItem_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
Keyboard.FocusedElement.RaiseEvent(New RoutedEventArgs With {.RoutedEvent = LostFocusEvent})
End Sub
我知道这是有点老了,但任何未来的读者,简单的设置我的ToolBar
为我工作如下:
FocusManager.IsFocusScope="False"
旧的,但没有忘记:) – thumbmunkeys 2013-03-28 13:24:12
变得更老...因此,我喜欢这样一个简单的解决方案,但我担心有一些其他控制某处或稍后我可能会添加的东西,也不会导致文本框失去焦点。有任何想法吗? – sraboy 2015-01-09 05:27:15
@sraboy:不知道我是否正确理解了你,但是这个设置只会影响你应用它的控件,而不是任何新添加的控件。 – dotNET 2015-01-09 06:15:37
丹科heinzi UNDgrüßeAUS DEM 4 bezirk;) – thumbmunkeys 2011-04-12 06:59:35
@IErbaer:Grüßezurück,auch aus dem 4. Bezirk。 [Sitze gerade an der TU]。 ;-) – Heinzi 2011-04-12 07:27:58
它确实失去了重点,虽然这是事情!例如。你在一个文本框中,然后选择一个菜单项。 – 2014-11-13 00:00:25