Как запустить / переместить в OriginalSource EventHandler? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть пользовательский элемент управления ROOT_CONTROL, который содержит другой пользовательский элемент управления SUB_CONTROL, который содержит кнопку BUTTON.

ROOT_CONTROL-> SUB -> BUTTON

<UserControl x:Name="ROOT_CONTROL"
GotKeyboardFocus="UserControl_GotKeyboardFocus">
<StackPanel>
<UserControl x:Name="SUB_CONTROL">
<Button x:Name="BUTTON" Click="BUTTON_Click">
</UserControl>
</StackPanel>
<SUB_Control>
</UserControl>

У меня есть обработчик событий UserControl_GotKeyboardFocus, связанный с ROOT_CONTROL, у меня есть обработчик событий Button_Click, связанный с BUTTON.Когда пользователь нажимает кнопку BUTTON и на этом ROOT_CONTROL есть KeyboardFocus - он работает нормально, но когда на этом элементе управления (или на любом из его дочерних элементов нет KeyboardFocus) он запускает UserControl_GotKeyboardFocus (и это нормально), но затем он не запускает BUTTONсобытие клика.Поэтому, когда на этом элементе управления нет фокуса клавиатуры, пользователю нужно дважды щелкнуть мышью, чтобы увидеть результат (один раз, чтобы дать фокус, второй - чтобы вызвать событие кнопки).

Я не изменяю свойство e.Handled на true внутри UserControl_GotKeyboardFocusобработчик события.

Как легко (если это возможно) запускать обработчик событий нажатия кнопки BUTTON, когда на ROOT_CONTROL нет фокуса клавиатуры?

РЕДАКТИРОВАТЬ:

    private void UserControl_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    if (Guard)
    {
        Guard = false;
    }
    else
    {
        if (e.OldFocus == null)
        {
            if (SessionData.SelectionWindow != null && !(SessionData.SelectionWindow.Visibility == Visibility.Visible))
            {

                SessionData.SelectionWindow.Ano.UpdateSelection();
                SessionData.SelectionWindow.UpdatePosition();
                SessionData.SelectionWindow.Visibility = Visibility.Visible;
                if (e.OriginalSource is FrameworkElement)
                {
                    (e.OriginalSource as FrameworkElement).Focus();
                }
            }
            else
            {
            }
        }
        else
        {
        }

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