如何知道控制是否处理或用户控制键内事件

时间:2015-09-03 10:13:47

标签: c# wpf user-controls controls keyup

我的UserControl中有一些UIElements。其中一些可能是多行文本框,其中一些可能不是。例如:

 <Usercontrol PreviewKeyDown="Wizard_PreviewKeyDown">
    <StackPanel>
      <TextBox/>
      <TextBox AcceptsReturn="True"/>
    </StackPanel>
 <Usercontrol>

此控件背后的代码:

 private void Wizard_PreviewKeyDown(object sender, KeyEventArgs e)
 {
     Key key = (e.Key == Key.System ? e.SystemKey : e.Key);
     if (key == Key.Enter)
     {
         UIElement uiElement = (e.OriginalSource as UIElement);
         GoToNext(); //if uiElement is already handled I should not call this method
     }
 }

如果处理了uiElement,我不应该调用我的GoToNext()方法。在这种情况下,如果我选择我的第一个文本框并单击Enter它应该转到下一个,因为此文本框不是多行。如果我选择我的第二个文本框,它不应该下一个,因为它是一个多行。我怎么知道是否处理了UIElement?有人可以帮我解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我使用了KeyDown =&#34; Wizard_KeyDown&#34;而不是PreviewKeyDown =&#34; Wizard_PreviewKeyDown&#34;它按我的意愿工作。