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

 <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是否处理?有人可以帮我解决这个问题吗?

谢谢!

最佳答案

我使用的是KeyDown =“ Wizard_KeyDown”而不是PreviewKeyDown =“ Wizard_PreviewKeyDown”,它可以按我的意愿工作。

关于c# - 如何知道控件是否已处理或内部没有用户控件键入事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32372845/

10-10 09:26