在不与WPF中的组件元素交互的情况下失去焦点

在不与WPF中的组件元素交互的情况下失去焦点,wpf,vb.net,xaml,lost-focus,Wpf,Vb.net,Xaml,Lost Focus,我在一个边框中有一个元素,单击一个按钮,我会将其可见性更改为可见。 单击此按钮并显示边框元素时,我将边框元素作为焦点元素: <Border Name="MasterBorder" BorderBrush="#737373" BorderThickness="2" CornerRadius="6" Margin="19,0,0,-25" HorizontalAlignment="Left" Width="26" Background="#595959" Grid.Column

我在一个边框中有一个元素,单击一个按钮,我会将其可见性更改为可见。 单击此按钮并显示边框元素时,我将边框元素作为焦点元素:

        <Border Name="MasterBorder" BorderBrush="#737373" BorderThickness="2" CornerRadius="6" Margin="19,0,0,-25" HorizontalAlignment="Left" Width="26" Background="#595959" Grid.Column="0" Visibility="Hidden" LostFocus="c_LostFocus">
            <Slider Name="Master" Orientation="Vertical" Minimum="0" Maximum="100" Margin="2" />
        </Border>
如果执行GetFocusedElement,则返回主边框,因此我认为这是正确的。我有

LostFocus="c_LostFocus"
在我的按钮上,将触发以下命令

Private Sub c_LostFocus(sender As Object, e As RoutedEventArgs)
    MessageBox.Show("Lost Focus")
End Sub
我的问题是,当我打开控件,它聚焦时,一切正常,如果我使用控制滑块,然后在控件外单击,它会触发失去焦点功能。如果我不与滑块或边框交互,并单击滑块或边框之外的某个位置以移除焦点,则不会触发失去焦点功能。你知道为什么会这样吗

主窗口中用于更改焦点的其他处理程序:

Public Sub OnPreviewMouseDownA(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
    FocusManager.SetFocusedElement(MainWindow, MainWindow)

End Sub

如果您单击的内容实际上从
边框
窃取焦点,则应引发
LostFocus
事件


例如,单击
TextBlock
不会引发边框的
LostFocus
事件,而单击
按钮或另一个输入控件则会引发该事件。

会引发“外部某处”表示您单击另一个可聚焦控件或单击的位置?不在该控件内的任何位置,在另一个控件实际聚焦之前,焦点不会丢失。为什么希望边框具有焦点?为什么不使用滑块?@HenrikHansen我希望边框及其所有内容都具有“控件”的焦点,因此我在单击主窗口时提供了它的焦点,但在我对控件做了一些操作之前,它仍然无法启动显示您的尝试?当你点击焦点边框外的一个按钮时,它能工作吗?我已经添加了我尝试过的内容,所以基本上,当点击任何地方时,它会在主窗口上变为焦点。我在想,如果在OnPreviewMouseDown中,如果我可以做一个点击测试来点击元素,如果它是一个我试图避免的控件,那么什么都不要做,但那是行不通的either@Navvy:第一个参数指定了作用域,并且在对FocusManager.SetFocusedElement.SetFocusedElement的两个调用中应该相同,这两个焦点在不同的页面上,我想这没用吧?
Public Sub OnPreviewMouseDownA(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
    FocusManager.SetFocusedElement(MainWindow, MainWindow)

End Sub