繁体   English   中英

如何在UserControl内部控制键盘焦点

[英]How To Control Keyboard Focus Inside a UserControl

我有一个简单的UserControl其中包含一些TextBlock 另外,我在StackPanel还有一些UserControl ,通常当我按箭头键时,键盘焦点会在UserControl之间移动,这就是我不希望的行为。

我想处理UserControl内的箭头键按下并停止键盘导航的正常行为,就像TextBox 我怎样才能做到这一点?

<StackPanel  >
    <dtp:DatePicker  VerticalAlignment="Top"/> <!-- When I press down arrow key on this element, keyboard navigation moves to next element-->
    <dtp:DatePicker  VerticalAlignment="Top" DisplayType="DateOnly"/>
    <dtp:DatePicker  VerticalAlignment="Top" DisplayType="TimeOnly"/>
    <dtp:DatePicker  VerticalAlignment="Top" HasSeconds="False"/>
    <dtp:DatePicker  VerticalAlignment="Top" DisplayType="DateOnly" HasSeconds="False"/>
    <dtp:DatePicker  VerticalAlignment="Top" DisplayType="TimeOnly" HasSeconds="False"/>
</StackPanel>

通常,对于仅位于StackPanel内部的控件,简单的控件在按箭头键时不会失去焦点。 您可以通过这个小测试来尝试一下。

<StackPanel>
    <DatePicker/>
    <DatePicker/>
    <DatePicker/>
</StackPanel>

也许您的问题不在dtp:DatePicker控件之外。 也许您正在将StackPanel放在ItemTemplate

无论如何,您可以尝试使用PreviewKeyUp事件中和箭头键,如下所示:

<dtp:DatePicker PreviewKeyUp="OnPreviewKeyUp"/>

private void OnPreviewKeyUp(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Up || e.Key == Key.Down)
        e.Handled = true;
}

或者,您可以尝试在导航模式下放置导航约束:

<dtp:DatePicker KeyboardNavigation.DirectionalNavigation="None" 
                KeyboardNavigation.TabNavigation="None"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM