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



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

<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>

点击控制是:

Private Sub VolumeControl_Click(sender As Object, e As RoutedEventArgs)
FocusManager.SetFocusedElement(MainPlayPage, MasterBorder)
End Sub

如果我执行GetFocusedElement,这将返回MasterBorder,所以我认为这是正确的。我有

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

如果您点击了某个实际上从Border上窃取焦点的东西,则应该引发LostFocus事件。

例如,单击TextBlock不会引发Border的LostFocus事件,而单击Button或其他输入控件会引发。

相关内容

最新更新