我有一个自定义的Popup覆盖了我的部分屏幕。当它打开时,我想禁用Tabbing到它后面的UserControl。我不想使用IsEnabled
属性,因为我不想使所有控件变灰。
还有另一个属性做同样的事吗? IsTabStop
仅阻止选项卡在UserControl本身上停止,而不是它的子项,并且IsFocusable
不是UserControl的有效属性。
答案 0 :(得分:17)
在容器控件上使用KeyboardNavigation.TabNavigation Attached Property和KeyboardNavigationMode.None。
KeyboardNavigation.TabNavigation="None"
答案 1 :(得分:5)
您可以将子控件上的IsTabStop
绑定到IsTabStop
上的UserControl
。
这样,你只需要设置一次。
答案 2 :(得分:0)
您可以编写一个您将在顶部元素中设置的附加属性 附加属性将在所有子元素中递归地将IsTabStop设置为false。
如果您需要任何帮助,请与我联系。
答案 3 :(得分:0)
将该属性绑定到用户控件。
<UserControl x:Class="PDV.UserControls.InputField"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
// etc... then:
x:Name="Root" KeyboardNavigation.TabNavigation="Local" >
<Grid>
<TextBox Name="textBox"
TabIndex="{Binding Path=TabIndex, ElementName=Root}"
IsTabStop="{Binding Path=IsTabStop, ElementName=Root}" />
</Grid>
</UserControl>
答案 4 :(得分:0)
在我的情况下,使用KeyboardNavigation.TabNavigation="None"
的解决方案似乎会涉及所有其他父容器。在某些情况下可能不希望这样做。
所以我想出了一个在代码后面的PreviewKeyDown-Event,像这样:
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab)
{
((Control)sender).Focus();
e.Handled = true;
}
}
答案 5 :(得分:0)
这对我有用:
// ...
var applicationWindow = Application.Current?.MainWindow;
if (applicationWindow != null)
{
KeyboardNavigation.SetIsTabStop(
element: applicationWindow,
isTabStop: false);
KeyboardNavigation.SetTabNavigation(
element: applicationWindow,
mode: false);
}
// ...
注意:最好有一个备份计划来恢复键盘导航,以防万一只是临时需要上面的情况。