Hel*_*ein 7 navigation keyboard wpf visibility hyperlink
问题:使用TAB键导航在折叠的TextBlock/Hyperlink处停止.
再生产:
<Window x:Class="TabTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Width="200" Height="200">
<Grid>
<StackPanel Orientation="Vertical">
<TextBox Text="before" />
<TextBlock>
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
</TextBlock.Style>
<Hyperlink Focusable="False">
<TextBlock Text="test" />
</Hyperlink>
</TextBlock>
<TextBox Text="after" />
</StackPanel>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
如果你运行这个超级简单的演示并按TAB键,光标将移动到"之前"TextBox.再次按TAB确实......没有.光标停留在"之前"TextBox中,永远不会到达"之后"文本框.当Hyperlink的TextBlock可见时,导航按预期工作.
问题:如何在HyperLink折叠的情况下使TAB导航正常工作?
Gim*_*mno 10
问题不是超链接,而是TextBlock中的嵌套控件.你可以改成它
<TextBlock Visibility="Collapsed">
<TextBlock Text="MyText" />
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
并且标签导航仍然会被破坏.
解决方案是KeyboardNavigation.TabNavigation="Once"
在外部TextBlock使用:
<TextBlock KeyboardNavigation.TabNavigation="Once">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
</TextBlock.Style>
<Hyperlink Focusable="False">
<TextBlock Text="test" />
</Hyperlink>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
然后一切都按照预期的方式运作.问题是内部TextBlock获得了Focus,即使外部Control被折叠也是如此.设置 KeyboardNavigation.TabNavigation
为Once
解决它作为整个Container及其子项只获得焦点一次.(MSDN)