WPF Tab 键顺序工作错误

2023-12-01

我在 WPF 中有一个观点,我一直在努力使 Tab 键顺序正确。我有三个文本框(我们称它们为 Text1、Text2 和 Text3)和两个自定义控件,每个控件上都有几个其他文本框和各种控件(我们称它们为 Custom1 和 Custom2)。

布局是这样的,选项卡流应为 Text1、Text2、Custom1、Custom2、Text3。我已在每个控件上设置 TabIndex 属性以匹配此顺序,并验证所有控件均设置为 IsTabStop。

问题是,实际的选项卡流程是 Text1、Text2、Text3,然后是 Custom1、Custom2,我不明白为什么。当它进入自定义控件时,它确实按照我的预期正确地跳过了其中的每个控件。我只是不明白为什么它在进入第一个自定义控件之前进入第三个文本框。

我已经尝试了我能想到的一切,包括确保所有 xaml 元素都按 Tab 键顺序排列,但似乎没有任何帮助。

我怀疑它在关注任何自定义控件之前会先检查所有基本控件,但我没有想法。任何帮助都会很棒。

EDIT:这是我的 xaml:

<Grid>
    <GroupBox x:Name="_groupBox" BorderBrush="Transparent" BorderThickness="0">
        <Grid x:Name="_card">
            <Label Content="A:" Height="28" HorizontalAlignment="Left" Margin="5,3,0,0" Name="_labelA" VerticalAlignment="Top" />
            <Label Content="B:" Height="28" HorizontalAlignment="Left" Margin="5,25,0,0" Name="_labelB" VerticalAlignment="Top" />
            <TextBox Name="_a" Height="20" HorizontalAlignment="Left" Text="{Binding AText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding AEnabled}" Margin="94,5,0,0"  VerticalAlignment="Top" LostFocus="InputNameLeave" Width="221" TabIndex="0" />
            <TextBox Name="_b" Height="20" HorizontalAlignment="Left" Margin="94,26,0,0" Text="{Binding BText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="102" TabIndex="1" />
            <my:CustomControlA HorizontalAlignment="Left" Margin="-6,55,0,0" x:Name="_custom1" VerticalAlignment="Top" TabIndex="2" IsTabStop="True" />
            <my:CustomControlB HorizontalAlignment="Left" Margin="334,0,0,0" x:Name="_custom2" VerticalAlignment="Top" Width="320" TabIndex="3" IsTabStop="True" />
            <Label Content="C:" Height="28" HorizontalAlignment="Left" Margin="342,59,0,0" Name="_labelC" VerticalAlignment="Top" />
            <TextBox Name="_c" Height="20" HorizontalAlignment="Left" Margin="417,60,0,0" Text="{Binding CText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding CEnabled}"  VerticalAlignment="Top" Width="154" TabIndex="4" />
        </Grid>
    </GroupBox>
</Grid>

我没有可用的自定义控件,因此我创建了一个仅包含文本框的控件。将其连接到 XAML 后,我发现 Tab 键顺序如下:

TextBox1、TextBox2、CustomControl1、CustomControl2、TextBox3、自定义控件 1 内的文本框、CustomControl2 内的文本框。

请注意,在 TextBox2 Tab 键移动后,焦点将移至自定义控件本身,而不是他们碰巧拥有的任何子控件。我的自定义控件中的 TextBox 没有 TabIndex,因此假定其 TabIndex 为默认值 Int32.MaxValue(请参阅TabIndex 属性的 MSDN 文档)。因此它们在 Tab 键顺序中排在最后。

我发现如果我将自定义控件标记为,事情会更好IsTabStop="False"(我不明白为什么我希望将焦点放在自定义控件本身上),并将自定义控件中 TextBox 的选项卡索引设置为<my:CustomControl />元素通过添加属性TabIndex="{TemplateBinding TabIndex}"到自定义控件中的文本框。完成此操作后,正如我所期望的那样,选项卡顺序是:

TextBox1、TextBox2、自定义控件 1 内的文本框、CustomControl2 内的文本框、TextBox3。

当然,我的自定义控件仅包含一个 TextBox,因此设置单个选项卡索引可以解决我的问题。我没有你的代码,所以我不能肯定地说,但将自定义控件中所有子控件的选项卡索引设置为<my:CustomControl />元素以同样的方式。

EDIT: 如果你不能使用TemplateBinding,而是拥有一个带有相应 .xaml.cs 文件的 .xaml 文件,那么您就拥有了所谓的用户控制,不是自定义控件。在这种情况下, 您可以尝试使用如下所示的方法在 CustomControlA 的 XAML 中设置选项卡索引:

TabIndex="{Binding Path=TabIndex, RelativeSource={RelativeSource AncestorType={x:Type my:CustomControlA}}}"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF Tab 键顺序工作错误 的相关文章

随机推荐

  • 远程服务器命令执行

    在远程服务器上执行 shell 命令并在不实际登录的情况下获取输出的最佳方法是什么 也许用 ssh 密钥 最好用python 你的意思是不登录manually 因为实际上允许您在根本不登录的情况下执行命令的服务器将带来巨大的安全风险 看起来
  • 使用 XML 数据类型读取存储在 SQL Server 2008 R2 中的 XML 文档

    我正在使用 SQL Server 2008 R2 和 ASP NET 3 5 我在 SQL 端以 XML 形式存储数据表 NET 列的数据类型为 XML 这是将 XML 存储在 SQL Server 的表列中的示例
  • 在 vb.net 中显示加载屏幕

    当长时间的进程正在运行时 我需要显示一个屏幕或其他内容 说 正在加载 或其他内容 我正在使用 Windows Media Encoder SDK 创建一个应用程序 需要一段时间来初始化编码器 我希望在启动编码器时弹出一个屏幕 显示 正在加载
  • AttachNotSupportedException:没有提供者安装 java 代理

    我在将 Java 应用程序附加到远程 Java 虚拟机时遇到问题 我在 Windows 7 上使用 java 8u45 并且我的附加代码非常简单 import java io IOException import java util Lis
  • 在 C++ 中将数组传递给函数

    include
  • JPA RollbackException 但不在单元测试中

    我有一个 java 项目 其中包含一组单元测试 这些单元测试使用 JPA2 执行简单的更新和删除 单元测试运行没有问题 我可以验证数据库中的更改 一切都很好 我尝试在处理程序 Smartfox 扩展 中复制 粘贴相同的函数 我收到回滚异常
  • 我应该针对哪个版本的 Android 进行开发? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 刚刚开始为 Android 开发 想法是创建一个在 A
  • Flask sqlalchemy 多对多插入数据

    我试图在这里建立多对多关系Flask SQLAlchemy 但似乎不知道如何填写 多对多标识符数据库 您能帮助我了解我做错了什么以及它应该是什么样子吗 class User db Model tablename users user id
  • 如何使用 Applescript 构建和运行 Xcode?

    我正在尝试让 Xcode 使用 Applescript 构建和运行我的项目 这是同样的问题如何使用 Applescript 构建和运行 Xcode 但我认为这个答案可能已经过时了 因为它在我的机器上不起作用 我明白了 execution e
  • iOS CALayerInvalidGeometry

    我的应用程序崩溃了 并显示以下消息 由于未捕获的异常 CALayerInvalidGeometry 而终止应用程序 原因 CALayer 位置包含 NaN 2 74665e 34 nan 这里有更详细的异常消息 CALayer positi
  • 为什么碰撞不起作用,cocos2d v3?

    我用 cocos2d v3 创建了像 flappybird 这样的简单游戏 接口类 interface GameScene CCScene
  • 什么时候使用 CRC 比 MD5/SHA1 更合适?

    何时适合使用 CRC 进行错误检测 而不是使用 MD5 或 SHA1 等更现代的哈希函数 前者更容易在嵌入式硬件上实现吗 CRC 可以很好地检测数据中可能出现的随机错误 例如网络干扰 线路噪声 失真等 CRC 的计算复杂度远低于 MD5 或
  • 默认显示 Visual Studio 扩展工具栏

    在 Visual Studio 扩展中 我在 vsct 文件中将工具栏定义为 menu type Toolbar menu
  • 在什么情况下使用 EJB?网站/网络应用程序开发需要它们吗?

    EJBS 是否用于数据库支持的网站 所有人都可以访问 没有什么是永远的required当然 如果你愿意 你可以构建一个 Web 应用程序作为背后的单个大型 C 函数CGI 也就是说 EJB 确实使 Web 应用程序开发变得更加容易 它们被纳
  • SwiftUI 父子绑定:@StateObject 中的 @Published 不起作用,而 @State 起作用

    我有一个来自的自定义模态结构这个问题 代码如下 某些属性在模态视图中进行了修改 并通过Binding 问题是 当房产来自 StateObject Published更改不会反映在模式视图中 当使用一个简单的 State 最小示例 完整代码
  • 避免在使用层次结构参数的操作中进行静态绑定

    我发现了一个关于静态绑定的问题 我的真实课程非常扩展 所以我将使用几个玩具课程来表达我的问题 我们假设我们有以下层次结构 public class Element public class Element1 extends Element
  • 添加(减去)月份但不超过新月份的最后一天

    我希望可靠地添加和减去六个月 债券时间 lubridate 例如 添加六个月12 31 2014应该导致6 30 2015 并添加到2 28 2014应该导致8 31 2014 问题与as Date 2014 12 31 months 6
  • DOT 可以生成更结构化的图表吗?

    我不太确定如何描述我的客户想要什么 所以我会让一张图片来说明大部分内容 我正在使用 DOT 生成或多或少的物料清单问题的图表 显示所有级别的传入批次和所有传出批次 这些批次是根据传入批次中的材料创建的 我已经获得了创建包含适当结构化数据的图
  • 访问生产中的 Google App Engine Python 应用程序代码

    背景 我是 Google App Engine 的新手 熟悉其他云提供商的服务 我正在寻找类似于对生产节点的 shell 访问的访问 视图 使用基于 Python Django 的 Google App Engine 应用程序 我想查看生产
  • WPF Tab 键顺序工作错误

    我在 WPF 中有一个观点 我一直在努力使 Tab 键顺序正确 我有三个文本框 我们称它们为 Text1 Text2 和 Text3 和两个自定义控件 每个控件上都有几个其他文本框和各种控件 我们称它们为 Custom1 和 Custom2