如何知道控制被处理或没有内部用户控制按键事件
How to know control is handled or no inside user-control key-up event
我的用户控件中有一些 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() 方法。在这种情况下,如果我 select 我的第一个文本框并单击 Enter 它应该转到下一个,因为这个文本框不是多行的。如果我 select 我的第二个文本框它不应该在下一个,因为它是多行的。我怎么知道 UIElement 是否已处理?有人可以帮我解决这个问题吗?
谢谢!
我使用 KeyDown="Wizard_KeyDown" 而不是 PreviewKeyDown="Wizard_PreviewKeyDown" 并且它按我想要的方式工作。
我的用户控件中有一些 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() 方法。在这种情况下,如果我 select 我的第一个文本框并单击 Enter 它应该转到下一个,因为这个文本框不是多行的。如果我 select 我的第二个文本框它不应该在下一个,因为它是多行的。我怎么知道 UIElement 是否已处理?有人可以帮我解决这个问题吗?
谢谢!
我使用 KeyDown="Wizard_KeyDown" 而不是 PreviewKeyDown="Wizard_PreviewKeyDown" 并且它按我想要的方式工作。