失去焦点而不与WPF中的组件元素交互

时间:2018-11-01 08:19:46

标签: wpf vb.net xaml lost-focus

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

        <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

1 个答案:

答案 0 :(得分:1)

只要您单击实际上从LostFocus夺走焦点的内容,就应该引发Border事件。

例如,单击TextBlock不会引起LostFocus事件引起边框的升高,而单击Button或其他输入控件则会引起这种情况。