我创建了非常简单的布局来显示我的问题。基本上我在另一个usercontrol(浏览)中有一个usercontrol(form),现在我希望能够使用tab和ctrl + tab循环遍历表单。但是我注意到当我按下任何一个按钮(在表单内)上的箭头键时,它跳出表单到浏览。因此,我将键盘的方向导航设置为无,但它忽略了它,仍然允许我使用箭头键导航。如何确保我无法使用键盘退出该表单?
这是xaml
<Window xmlns:wpfApplication1="clr-namespace:WpfApplication1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock HorizontalAlignment="Center" FontSize="36" Text="This is a browse" />
<wpfApplication1:Form Grid.Row="1"/>
<StackPanel Grid.Row="2"
HorizontalAlignment="Center"
Orientation="Horizontal">
<Button Height="50" Width="300">move previous</Button>
<Button Height="50" Width="300">move next</Button>
</StackPanel>
</Grid>
</Window>
<UserControl x:Class="WpfApplication1.Form"
Margin="30"
Background="Gray"
KeyboardNavigation.ControlTabNavigation="Cycle"
KeyboardNavigation.DirectionalNavigation="None"
KeyboardNavigation.TabNavigation="Cycle">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" Text="First Name:" />
<TextBox Width="500"
Height="50"
HorizontalAlignment="Left" />
</StackPanel>
<StackPanel Grid.Row="1"
Grid.ColumnSpan="2"
HorizontalAlignment="Center"
Orientation="Horizontal">
<Button Width="200"
Height="50"
Content="Save" />
<Button Width="200"
Height="50"
Content="Close" />
</StackPanel>
</Grid>
谢谢:)
答案 0 :(得分:2)
您可以为按钮添加PreviewKeyDown
的处理程序,以覆盖箭头键事件。
<Button PreviewKeyDown="Button_PreviewKeyDown" />
代码:
private void Button_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.IsDown && e.Key == Key.Down || e.Key == Key.Up || e.Key == Key.Left || e.Key == Key.Right)
{
e.Handled = true;
}
}
修改强>
如果您希望使用样式为所有按钮添加处理程序,可以使用EventSetter来执行此操作:
<UserControl.Resources>
<Style TargetType="{x:Type Button}">
<EventSetter Event="PreviewKeyDown" Handler="Button_PreviewKeyDown"/>
</Style>
</UserControl.Resources>
答案 1 :(得分:2)
来自MSDN
KeyboardNavigationMode
值:
无 - 此容器内不允许使用键盘导航。
这意味着不允许从此容器外部使用键导航到此容器中。
您正在寻找的是:
包含 - 根据导航的方向,当到达容器的结尾或开头时,焦点将返回到第一个或最后一个项目,但不会超过容器的开头或结尾。