我有一个简单的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>
答案 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"/>