2011-04-12 42 views

回答

2

问题是,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的答案。)

+0

丹科heinzi UNDgrüßeAUS DEM 4 bezirk;) – thumbmunkeys 2011-04-12 06:59:35

+0

@IErbaer:Grüßezurück,auch aus dem 4. Bezirk。 [Sitze gerade an der TU]。 ;-) – Heinzi 2011-04-12 07:27:58

+0

它确实失去了重点,虽然这是事情!例如。你在一个文本框中,然后选择一个菜单项。 – 2014-11-13 00:00:25

3

这很适合我:

Private Sub MenuItem_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) 

    Keyboard.FocusedElement.RaiseEvent(New RoutedEventArgs With {.RoutedEvent = LostFocusEvent}) 

End Sub 
10

我知道这是有点老了,但任何未来的读者,简单的设置我的ToolBar为我工作如下:

FocusManager.IsFocusScope="False" 
+2

旧的,但没有忘记:) – thumbmunkeys 2013-03-28 13:24:12

+0

变得更老...因此,我喜欢这样一个简单的解决方案,但我担心有一些其他控制某处或稍后我可能会添加的东西,也不会导致文本框失去焦点。有任何想法吗? – sraboy 2015-01-09 05:27:15

+0

@sraboy:不知道我是否正确理解了你,但是这个设置只会影响你应用它的控件,而不是任何新添加的控件。 – dotNET 2015-01-09 06:15:37