DockPanel 选项卡顺序

2024-06-26

我在 ItemsControl 的 DataTemplate 中设置了一个 DockPanel,如下所示:

<ItemsControl HorizontalContentAlignment="Stretch">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <DockPanel>
        <ComboBox DockPanel.Dock="Left"/>
        <ComboBox DockPanel.Dock="Left"/>
        <Button DockPanel.Dock="Right">Button</Button>
        <!-- This will appear before the button...it has to go after it in the XAML so it will fill properly in the DockPanel -->
        <TextBox DockPanel.Dock="Left" MinWidth="100" HorizontalAlignment="Stretch"/>
      </DockPanel>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

我希望文本框填充组合框和按钮之间的所有剩余空间。我必须将文本框放在 XAML 的最后,因为 DockPanel 只会填充最后一个子项。看起来不错;然而,选项卡顺序现在已经搞砸了。现在,它使用选项卡组合框-组合框-按钮-文本框而不是组合框-组合框-文本框-按钮。

我尝试使用KeyboardNavigation.TabIndex每个项目上的属性,但由于这是 ItemsControl 的 DataTemplate(每个停靠面板都将用于一个单独的项目),这使得 Tab 键顺序垂直向下跳到每个项目的组合框,然后垂直向下每个文本框,然后垂直向下跳按下每个按钮,而不是遍历每一行,然后按下所需的行为。

用户界面示例:

[Combo11] [Combo12] [Text1] [Button1]
[Combo21] [Combo22] [Text2] [Button2]

从目前的情况来看,Combo11,Combo12,Button1,Text1,Combo21,Combo22,Button2,Text2。如果我添加 TabOrder 属性,它就会Combo11,Combo21,Combo12,Combo22,Text1,Text2,Button1,Button2.

我想要它走Combo11,Combo12,Text1,Button1,Combo21,Combo22,Text2,Button2.

有谁对如何解决这个 UI 问题有任何想法吗?


如果要保留 DockPanel,可以在父 DockPanel 上使用 KeyboardNavigation.TabNavigation="Local",然后可以在其中的控件上设置选项卡索引值。

像这样 -

    <ItemsControl HorizontalContentAlignment="Stretch">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <DockPanel KeyboardNavigation.TabNavigation="Local">
                    <ComboBox DockPanel.Dock="Left" TabIndex="1"/>
                    <ComboBox DockPanel.Dock="Left" TabIndex="2"/>
                    <Button DockPanel.Dock="Right" TabIndex="4">Button</Button>
                    <!-- This will appear before the button...it has to go after it in the XAML so it will fill properly in the DockPanel -->
                    <TextBox DockPanel.Dock="Left" MinWidth="100" HorizontalAlignment="Stretch" TabIndex="3"/>
                </DockPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

正如您所发现的,如果您只设置控件的制表符索引值,这些值对于表单来说是全局的,因此所有 TabIndex="0" 都会首先被制表,然后是所有 TabIndex="1",依此类推。在父容器上设置 KeyboardNavigation.TabNavigation="Local" 可以修复此问题。

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

DockPanel 选项卡顺序 的相关文章

  • 导入GDK时出现问题

    我正在尝试将 GDK 导入到我的程序中 但仍然出现错误 No module named GDK 你知道我该如何解决这个问题吗 因为它在我尝试之前就可以工作import gtk GDK and import GDK 我已经安装了PyGTK P
  • Windows 更新 KB4040972/73 导致 WPF 类出现黑色图像

    我有一个依赖于深度缩放图像 从 PNG 转换为各种比例的 JPG 金字塔 的应用程序 我们使用 DeepZoomTools dll 来实现 这依赖于PresentationCore dll 多年来一直运行良好 推出 KB4040972 和
  • 设置不可调整大小的 GridViewColumn

    我在 C WPF 应用程序中使用 ListView 和 GridViewColumn 对于某些列 我使用可见性管理器 this one https stackoverflow com a 9634769 6479770 但是 当第 1 列和
  • 使用 C# 从 UIElement 截取 WPF 屏幕截图 JPG

    我正在尝试从我的 WPF 应用程序的一部分创建 JPG 就像截图一样 只是个人的UIElements 我从这里开始 http www grumpydev com 2009 01 03 take wpf screenshots http ww
  • 打印 WPF 位图图像

    打印位图图像的最佳方法是什么 我有 System Drawing 背景 所以我正在考虑将其转换为位图 然后打印它 但我认为可能有更好的方法 Thanks 根据 Drew 的回答 最好测量并安排传递给 PrintVisual 方法的容器 这将
  • 在堆栈视图内的 Uilabel 之间创建垂直线 [重复]

    这个问题在这里已经有答案了 我想在代码中创建一个带有自定义标头的 UICollectionView 因此 我创建了 UICollectionViewCell 的子类来描述我的自定义标头 我想在标题中以水平线显示五个标签 因此 我创建了五个标
  • 使用 gtk+ 播放视频

    您对使用 GTK 播放视频有什么建议吗 对于在 GTK 和其他 GTK 绑定上播放视频 您有很多选择 选项 使用第三方库 1 尝试使用ogmrip gtk http ogmrip sourceforge net en manual html
  • 如何检查应用程序的另一个实例是否正在运行[重复]

    这个问题在这里已经有答案了 有人可以展示如何检查程序的另一个实例 例如 test exe 是否正在运行 如果是 则停止加载应用程序 如果存在该实例 想要一些严肃的代码吗 这里是 var exists System Diagnostics P
  • XAML:如何定义要在多个项目中使用的数据模板和样式

    我开始使用 WPF net 3 5 sp1 仅使用 VS 尚未混合 开发桌面应用程序 我现在的情况是 我在几个库中有一些通用的可重用组件 我可以在哪里定义样式和数据模板 以便它们可以在多个项目中重复使用 从而获得一致的外观和感觉 我看过 R
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 在wpf中移动鼠标

    我目前正在寻找一种在 wpf 中移动鼠标的方法 我发现的只是我无法可靠实现的非托管方法调用 有没有一种简单的方法可以将鼠标光标移动到某个地方 即 双击后 我肯定在这里遗漏了一些东西 添加对System Windows Forms dll的引
  • 绑定到布尔值的可见性的 TargetNullValue

    我有一个Grid whose Visibility使用以下方法将属性绑定到某个模型的布尔属性Converter
  • 在列表框 WPF 中设置所选项目的边框

    如何在列表框中设置样式以获得所选项目周围的边框 最简单的方法是添加一个触发器IsSelected在 ItemContainerStyle 中ListBox
  • 如何从不同的进程关闭窗口

    我有一个 C 应用程序 我想指示它从不同的进程中很好地关闭 我还希望能够要求它打开主窗口 我有一个对其主窗口句柄的引用 我知道我可以使用远程处理或 WCF 等复杂的方案来做到这一点 问题是我可以使用更简单的机制 例如窗口消息 或 c 应用程
  • 在数据网格中绑定枚举属性的最佳方法

    将枚举属性绑定到数据网格的最佳方法是什么 当前我正在使用公共属性并从那里返回枚举名称还有其他方法吗 枚举 public enum enStatus Draft 1 Published 2 Started 3 Completed 4 Mode
  • 通过搜索字符串过滤 CollectionViewSource - 绑定到 itemscontrol (WPF MVVM)

    有没有办法可以过滤CollectionViewSource仅显示游戏ItemsSource哪个 标题 包含 searchString In my PosterView我有这个CVS
  • WPF 数据触发器和故事板

    当视图模型 演示模型繁忙时 我试图触发进度动画 我有一个 IsBusy 属性 并将 ViewModel 设置为 UserControl 的 DataContext 当 IsBusy 属性为 true 时 触发 progressAnimati
  • “SetterCollectionBase”使用(密封)后,无法修改

  • 如何创建像Foursquare兴趣选择屏幕一样的gridview?

    我正在创建一个应用程序 要求用户选择多个兴趣 我正在尝试创建一个类似于 Foursquare 兴趣选择的屏幕类似于标签云其中可以选择多个按钮来代表用户的兴趣 我尝试创建一个 gridview 但无法实现按钮换行到下一行的效果 有没有办法通过
  • 如何将 CroppedBitmap 转换为 BitmapImage

    我正在尝试将 CroppedBitmap 转换为 BitmapImage 编辑 不使用内存流 我尝试过直接转换它 似乎这不是一个选择 这应该没那么难 我正在尝试剪切 BitmapImage 的一部分 并创建一个仅包含新裁剪的 Bitmap

随机推荐