如何在UserControl中控制键盘焦点

时间:2015-02-28 05:13:16

标签: c# .net wpf

我有一个简单的UserControl,其中包含一些TextBlock个。另外我在UserControl中有一些StackPanel,通常当我按箭头键时,键盘焦点在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>

1 个答案:

答案 0 :(得分:1)

通常情况下,只需在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;
}

或者您可以尝试使用Navigation mode设置导航约束:

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