在不与 WPF 中的组件元素交互的情况下失去焦点
Lose focus without interacting with component element in 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,这 returns MasterBorder,所以我认为这是正确的。我有
LostFocus="c_LostFocus"
在我的按钮上触发了以下内容。
Private Sub c_LostFocus(sender As Object, e As RoutedEventArgs)
MessageBox.Show("Lost Focus")
End Sub
我的问题是,当我打开控件并聚焦时,一切正常,如果我使用控件滑块,然后在控件外部单击,它会触发失去焦点功能。如果我不与滑块或边框交互,而是单击其外部某处以移除焦点,则不会触发我的失去焦点功能。知道为什么会这样吗?
main window 中用于更改焦点的其他处理程序:
Public Sub OnPreviewMouseDownA(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
FocusManager.SetFocusedElement(MainWindow, MainWindow)
End Sub
如果您单击的内容实际上从 Border
窃取了焦点,则应引发 LostFocus
事件。
例如,单击 TextBlock
不会引发边框的 LostFocus
事件,而单击 Button
或其他输入控件则会。
我在边框内有一个元素,我通过单击按钮将其可见性更改为可见。 单击此按钮并显示边框元素时,我将边框元素作为焦点元素:
<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,这 returns MasterBorder,所以我认为这是正确的。我有
LostFocus="c_LostFocus"
在我的按钮上触发了以下内容。
Private Sub c_LostFocus(sender As Object, e As RoutedEventArgs)
MessageBox.Show("Lost Focus")
End Sub
我的问题是,当我打开控件并聚焦时,一切正常,如果我使用控件滑块,然后在控件外部单击,它会触发失去焦点功能。如果我不与滑块或边框交互,而是单击其外部某处以移除焦点,则不会触发我的失去焦点功能。知道为什么会这样吗?
main window 中用于更改焦点的其他处理程序:
Public Sub OnPreviewMouseDownA(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
FocusManager.SetFocusedElement(MainWindow, MainWindow)
End Sub
如果您单击的内容实际上从 Border
窃取了焦点,则应引发 LostFocus
事件。
例如,单击 TextBlock
不会引发边框的 LostFocus
事件,而单击 Button
或其他输入控件则会。