在我的WPF 4.0基于桌面的应用程序中,我想添加一个通过按Tab键遍历窗口元素的功能。
下面是我的XAML片段:
<!--main body layout-->
<StackPanel x:Name="BodyLayout"
Style="{StaticResource Body_Block}">
<!--teaser block-->
<Grid x:Name="TeaserGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0"
Grid.Row="0"
Style="{StaticResource Body_Teaser_Centering}">
<Hyperlink Style="{StaticResource Body_Teaser_Hyperlink}"
Focusable="True"
KeyboardNavigation.TabIndex="0"
Click="Call_WinOffences_Click">
<Image Source="Resources/teaser_offences.png"
Style="{StaticResource Body_Teaser_Image}" />
<LineBreak />
<TextBlock Text="Offences"
Style="{StaticResource Body_Title}" />
</Hyperlink>
</TextBlock>
<TextBlock Grid.Column="1"
Grid.Row="0"
Style="{StaticResource Body_Teaser_Centering}">
<Hyperlink Style="{StaticResource Body_Teaser_Hyperlink}"
Focusable="True"
KeyboardNavigation.TabIndex="1"
Click="Call_WinEvents_Click">
<Image Source="Resources/teaser_events.png"
Style="{StaticResource Body_Teaser_Image}" />
<LineBreak />
<TextBlock Text="Events"
Style="{StaticResource Body_Title}" />
</Hyperlink>
</TextBlock>
</Grid>
</StackPanel>
我到底需要什么?我想打开这个窗口,并通过按Tab键盘上的第一次设置焦点在超链接块(Image
和TextBlock
)与TabIndex="0"
,并通过第二次按Tab将焦点切换到TabIndex="1"
元素上,我还想循环这些切换。换句话说,我希望用户可以通过Tab键盘在我的窗口中导航元素,因为我们经常在任何其他正常的WinForms应用程序中这样做。
我现在实际上有什么?当我按Tab键时,超链接没有焦点,没有鼠标,我就不能使用我的窗口。
求你了,让我知道,我做错了什么?
2条答案
按热度按时间trnvg8h31#
更新
我复制了你的示例代码(除了我没有的样式)到一个小项目中,它似乎对我来说工作得很好。我可以启动窗口,按Tab键聚焦第一个超链接,按Enter键,然后引发Click事件,再按Tab键等等。我唯一能想到的是,你的样式中的一些东西覆盖了这个行为。我上传了我的示例项目here。
注意:我更改了图像的源代码,所以您必须将它们改回来:)
旧帖子
这里有两个部分。第一个是FrameworkElement是否为Focusable。第二个是TabIndex。TabIndex位于派生自FrameworkElement的Control中,并非所有元素都派生自Control,例如TextBlock。矩形等。如果你出于某种原因想添加TabIndex到这样的元素中,你可以使用KeyboardNavigation.TabIndex来代替。下面是一个简单的例子,有6个带有Tab-顺序集和1 Rectangle不是Focusable(因为默认情况下它不是Focusable)。
0yg35tkg2#
也许这会有所帮助:WPF TabStop / TabIndex in ItemsControl
TabIndex就是你在这里使用的方法。当你点击Tab键浏览控件时,它将按照TabIndex的顺序。这些甚至不需要按顺序--如果没有定义3和4,1,2,5就和1,2,3一样。