Потерять фокус, не взаимодействуя с компонентом в WPF - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть элемент внутри границы, который я изменяю его видимость на видимый, по нажатию кнопки. Когда эта кнопка нажата, и отображается элемент границы, я помещаю элемент границы в качестве элемента с фокусом:

        <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 голосов
/ 01 ноября 2018

Событие LostFocus должно вызываться при условии, что вы нажмете на что-то, что фактически украдет фокус у Border.

Например, нажатие на TextBlock не приведет к возникновению события LostFocus для Границы, тогда как нажатие на Button или другой элемент управления вводом приведет к.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...