防止焦点/切换到UI中的不可见元素

时间:2019-07-16 11:06:14

标签: wpf

例如,我有Grid,其中有两行,而它们之间有GridSplitter。当用户界面中的行不可见时(例如,分隔符一直排在最前面;实际情况下,嵌套控件更加复杂),可以通过Tab键访问元素-我想防止这种情况。

我知道IsVisible的{​​{1}}属性(即使对于此类元素也是如此)和/或FrameworkElement / IsEnabledIsTabStop类,但没有一个解决我的问题。我的元素可用,等等,由于网格拆分器,当前在UI中不可见。基本上,只有鼠标可以访问的框架元素也应该参与Tab键功能。

可以复制的最简单情况是跟随主窗口的内容(将拆分器移到最高位置)。

KeyboardNavigation

结果应该是不可见元素应该被跳过,而下一个可见元素应该被聚焦。此功能应与 <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="10"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <TextBox Grid.Row="0" KeyboardNavigation.TabNavigation="Once"/> <GridSplitter Height="10" Grid.Row="1" KeyboardNavigation.TabNavigation="Once" HorizontalAlignment="Stretch"/> <Grid Grid.Row="2"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <TextBox x:Name="PART_Problem" Grid.Row="0" KeyboardNavigation.TabNavigation="Once"/> <TextBox Grid.Row="1" KeyboardNavigation.TabNavigation="Once"/> </Grid> </Grid> 兼容。

编辑1:稍微改变一下样本以显示KeyboardNavigation.ControlTabNavigation保持PART_Problem为某个非零值,从而消除了基于尺寸变化的解决方案。

1 个答案:

答案 0 :(得分:0)

尝试在XAML中设置属性Focusable="False"