首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UWP中,如何跳过UserControl及其所有子元素的选项卡键导航?

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

Stack Overflow用户
提问于 2020-11-03 07:08:59
回答 1查看 310关注 0票数 0

在UWP中,我希望动态地处理和跳过特定控件集的选项卡键导航。

例如,我的主页中有两个用户控件(两个控件都有许多子控件将被动态添加),并且希望在特定场景中跳过一个用户控件的选项卡键导航。

因此,我尝试将"IsTabStop“设置为UserControl的false。但这对它的孩子控制无效。仍然,选项卡键焦点移动到该UserControl的子程序中。

注意:如果我将"IsEnabled“设置为false,那么它就有效了。但我不想使用,因为它会影响视觉外观。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-11-03 09:32:05

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

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

更新:

通过测试,UserControl中的子元素无法继承IsTabStop属性值。因此,不能通过将UserControl属性设置为False来跳过IsTabStop中所有子元素的选项卡键导航。

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

例如:

MyUserControl.cs

代码语言:javascript
复制
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)方法。

代码语言:javascript
复制
userControlName.SetIsTabStop(false);

更新:

也许你可以试试下面的解决办法。

在您的KeyDown中为UserControl添加UserControl事件处理程序。

代码语言:javascript
复制
 private void UserControl_KeyDown (object sender, KeyRoutedEventArgs e)
    {
        if (e.Key == Windows.System.VirtualKey.Tab)
        {
            e.Handled = true;
            button1.Focus(FocusState.Keyboard);
        }
    }

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64658204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档