如何触发/移动到OriginalSource EventHandler?

时间:2019-02-07 14:12:26

标签: wpf events

我有一个用户控件ROOT_CONTROL,其中包含另一个用户控件SUB_CONTROL,其中包含按钮BUTTON。

ROOT_CONTROL-> SUB->按钮

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

我有一个与ROOT_CONTROL连接的UserControl_GotKeyboardFocus事件处理程序,我有一个与BUTTON连接的Button_Click事件处理程序。当用户单击BUTTON且该ROOT_CONTROL上有一个KeyboardFocus时-可以正常工作,但是当该控件(或其任何子级)上没有KeyboardFocus时,它会触发UserControl_GotKeyboardFocus(这样就可以了),但随后不会触发BUTTON点击事件。 因此,当该控件没有键盘焦点时,用户需要单击两次以查看结果(一次给出焦点,第二次触发按钮事件)。

我不更改UserControl_GotKeyboardFocus事件处理程序内的e.Handled属性为true。

当没有键盘焦点放在ROOT_CONTROL上时,如何轻松(如果可能)触发BUTTON单击事件处理程序?

编辑:

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

    }
}

0 个答案:

没有答案