繁体   English   中英

在 UWP 中,如何跳过 UserControl 及其所有子元素的 Tab 键导航?

[英]In UWP, how to skip tab key navigation for an UserControl and all of its child element?

在 UWP 中,我想动态处理和跳过特定控件集的 Tab 键导航。

例如,我的主页中有两个用户控件(两者都有很多将动态添加的子项),并且想在特定场景中暂时跳过一个用户控件的 Tab 键导航。

所以我试图将“ IsTabStop ”设置为该 UserControl 的 false。 但这对其子控件无效。 仍然 Tab 键焦点移动到该 UserControl 的子项内。

注意:如果我将“IsEnabled”设置为 false,则它可以正常工作。 但我不想使用,因为它会影响视觉外观。

提前致谢。

StackPanel类中没有IsTabStop属性。 IsTabStop属性在Windows.UI.Xaml.Controls.Control类中定义,并且StackPanel类不是从Control类直接或间接继承的。 您不能使用IsTabStop属性来设置StackPanel实例。

因此,如果您想跳过一个堆栈面板的 Tab 键导航,您需要在IsTabStop中的每个控件中将IsTabStop属性设置为False

更新:

经测试, UserControl的子元素不能继承IsTabStop属性的值。 因此,您不能通过将IsTabStop属性设置为 False 来跳过UserControl所有子元素的 Tab 键导航。

您可以使用UserControl类中的方法IsTabStopUserControl每个项目的IsTabStop设置为 false 。

例如:

我的用户控件.cs

public void SetIsTabStop(bool flag)
{
    var result = VisualTreeFindAll<Control>(this);
    foreach (var item in result)
    {
        item.IsTabStop=flag;
    }
}
private IList<T> VisualTreeFindAll<T>(DependencyObject element)
            where T : DependencyObject
{
    List<T> retValues = new List<T>();
    var childrenCount = VisualTreeHelper.GetChildrenCount(element);
    for (var i = 0; i < childrenCount; i++)
    {
        var child = VisualTreeHelper.GetChild(element, i);
        var type = child as T;
        if (type != null)
        {
            retValues.Add(type);
        }
        retValues.AddRange(VisualTreeFindAll<T>(child));
    }
    return retValues;
}

使用UserControl实例的名称以False调用SetIsTabStop(bool flag)方法。

userControlName.SetIsTabStop(false);

更新:

也许您可以尝试以下解决方法。

在您的PageUserControl添加KeyDown事件处理程序。

 private void UserControl_KeyDown (object sender, KeyRoutedEventArgs e)
    {
        if (e.Key == Windows.System.VirtualKey.Tab)
        {
            e.Handled = true;
            button1.Focus(FocusState.Keyboard);
        }
    }

您需要让除UserControl之外的第一个UserControl及其所有子控件获得焦点,然后按键导航将跳过UserControlUserControl的第一个子UserControl之外的子UserControl

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM