【问题标题】:How to know control is handled or no inside user-control key-up event如何知道控制被处理或没有内部用户控制按键事件
【发布时间】:2015-09-03 10:13:47
【问题描述】:

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

谢谢!

【问题讨论】:

  • “处理”是什么意思?我没有关注
  • 尝试检查 uiElement 是否为 TextBox,如果是,请检查 AcceptsReturn 属性。
  • 谢谢!我使用 KeyDown="Wizard_KeyDown" 而不是 PreviewKeyDown="Wizard_KeyDown" 并且它按我的意愿工作
  • @Dilshod by hendled 他的意思是当您在 AcceptsReturn 为 true 的文本框中按回车键时,文本框将处理回车(它将输入新行),但是当您在带有 AcceptsReturn=false 的文本框中按回车键时它不会处理,您应该在 UserControl keydown 事件订阅者中处理它
  • @Jamaxack 谢谢你是对的

标签: c# wpf user-controls controls keyup


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多