我有一个用户控件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
{
}
}
}