在 WPF Tabcontrol 标头模板中显示 SelectedIndex

2023-12-25

我的应用程序中有 1...n 个选项卡控件,具有以下 XAML 设置:

<TabControl Name="ordersTabControl" ItemsSource="{Binding CoilItems}">
  <TabControl.ItemTemplate>
    <DataTemplate DataType="models:Coil">
      <StackPanel>
        <TextBlock Text="{Binding CoilCode, StringFormat='Coil: {0}'}" />
        <TextBlock Text="{Binding ArticleCode, StringFormat='Auftrag: {0}'}" />
        <TextBlock Text="{Binding RestWeight, StringFormat='Restgewicht: {0} kg'}" />
      </StackPanel>
    </DataTemplate>
  </TabControl.ItemTemplate>
  <TabControl.ContentTemplate>
  [...]
  </TabControl.ContentTemplate>
</TabControl>

打开的选项卡数量会在运行时发生变化。现在,除了每个标题中已有的信息之外,我还想在每个选项卡中显示一个索引(即第一个选项卡显示“订单 1”,第二个选项卡显示“订单 2”等)。

AFAIK 使用 DataTemplate 时,我无法通过隐藏代码访问选项卡属性,那么 XAML 中是否有任何方法可以绑定选项卡标题内的文本块以显示选项卡控件中特定选项卡的索引?

我认为使用RelativeSource 和FindAncestors 应该可以吗?唉,我真的找不到任何关于这些设置的明确教程(而且我两天前才开始使用 WPF)。


我将为您提供使用附加属性的解决方案。检查代码:

附加属性

public static class IndexAttachedProperty
{


    #region TabItemIndex

    public static int GetTabItemIndex(DependencyObject obj)
    {
        return (int) obj.GetValue(TabItemIndexProperty);
    }

    public static void SetTabItemIndex(DependencyObject obj, int value)
    {
        obj.SetValue(TabItemIndexProperty, value);
    }

    // Using a DependencyProperty as the backing store for TabItemIndex.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty TabItemIndexProperty =
        DependencyProperty.RegisterAttached("TabItemIndex", typeof (int), typeof (IndexAttachedProperty),
                                            new PropertyMetadata(-1));



    #endregion

    #region TrackTabItemIndex

    public static bool GetTrackTabItemIndex(DependencyObject obj)
    {
        return (bool) obj.GetValue(TrackTabItemIndexProperty);
    }

    public static void SetTrackTabItemIndex(DependencyObject obj, bool value)
    {
        obj.SetValue(TrackTabItemIndexProperty, value);
    }

    // Using a DependencyProperty as the backing store for TrackTabItemIndex.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty TrackTabItemIndexProperty =
        DependencyProperty.RegisterAttached("TrackTabItemIndex", typeof (bool), typeof (IndexAttachedProperty),
                                            new PropertyMetadata(false, TrackTabItemIndexOnPropertyChanged));

    private static void TrackTabItemIndexOnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var tabControl = GetParent(d, p => p is TabControl) as TabControl;
        var tabItem = GetParent(d, p => p is TabItem) as TabItem;
        if (tabControl == null || tabItem == null)
            return;
        if (!(bool)e.NewValue)
            return;
        int index = tabControl.Items.IndexOf(tabItem.DataContext == null ? tabItem : tabItem.DataContext);
        SetTabItemIndex(d, index);
    }
    #endregion





    public static DependencyObject GetParent(DependencyObject item, Func<DependencyObject, bool> condition)
    {
        if (item == null)
            return null;
        return condition(item) ? item : GetParent(VisualTreeHelper.GetParent(item), condition);
    }
}

此代码定义了两个附加属性,第一个属性是设置项目是否跟踪其所在的选项卡项目索引。第二个是索引属性。

XAML 示例代码:

        <TabControl.ItemTemplate>
            <DataTemplate DataType="{x:Type WpfApplication3:A}">
                <StackPanel x:Name="tabItemRoot" WpfApplication3:IndexAttachedProperty.TrackTabItemIndex ="True">
                    <TextBlock Text="{Binding Text}"/>
                    <TextBlock Text="{Binding Path=(WpfApplication3:IndexAttachedProperty.TabItemIndex), ElementName=tabItemRoot}"/>

                </StackPanel>
            </DataTemplate>
        </TabControl.ItemTemplate>

上面的代码是使用附加属性的示例。您可以轻松地适应您的代码。

Result:

希望这段代码对你有用......

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

在 WPF Tabcontrol 标头模板中显示 SelectedIndex 的相关文章

  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • Coq:定义子类型

    我有一个类型 比如说 Inductive Tt a b c 定义它的子类型的最简单和 或最好的方法是什么 假设我希望子类型仅包含构造函数a and b 一种方法是对二元素类型进行参数化 例如布尔 Definition filt x bool
  • apk 在 docker 构建上返回 DNS 查找错误

    当运行任何apk add 命令同时docker build I get DNS lookup error fetch http dl cdn alpinelinux org alpine v3 8 main x86 64 APKINDEX
  • 如何让 Docker Gitlab CI 运行程序访问其父主机上的 Git?

    Gitlab 设置在我们的内部网络上http gitlab http gitlab 同一台机器上的 Docker 容器无法连接到它 如何配置 docker 以使其知道 gitlab 是其父级 当 Gitlab CI 尝试运行构建 在 Doc
  • 使用 ssl 的 boost asio 的详细程度

    有没有办法使用 boost asio 让 ssl 握手对我更明显 我收到错误 asio ssl 错误 我只是想要更多的冗长 因为这条消息对我来说几乎没有任何意义 我发现boost asio与ssl使用openssl 我只需要使用调试标志重新
  • 旋转绘图点以相对于另一组点重新投影

    我有一个点数据框 绘制两个多边形的轮廓 一个与另一个多边形成直角 如下所示 以下是绘制该图的数据 outlines lt structure list sample ids structure c 1L 1L 1L 1L 1L 1L 1L
  • 如何将 JS Console 注入到任何页面? jsconsole.com

    出于教育目的 我想remotely调试在我的移动设备上运行的应用程序 我无权访问源代码 只要我了解这是可能的http jsconsole com http jsconsole com直接喷射 http jsconsole com injec
  • Scenekit 中相机不跟随飞机

    我有一架正在飞行的飞机 我正在跟踪它 并且我还显示了飞机所遵循的路径 我正在绘制圆柱体作为绘制路径的线 类似于在两点之间画一条线 我有一个cameraNode 最初设置为 0 200 200 那时我可以看到飞机 但当我开始飞行时 它走出了屏
  • 循环向量化给出了不同的答案

    我正在构建一些单元测试 发现我的代码给出了slightly矢量化时会产生不同的结果 在下面的示例中 一个数组a一维求和并添加到初始值x 大多数元素a太小而无法改变x 代码是 module datamod use ISO FORTRAN EN
  • Int 列表与 Int -> Int 列表相比,类型相同吗?

    为什么这两个有相同的类型 ghci gt k Int Int ghci gt k Int gt Int Int gt Int EDIT per 加布里埃尔 冈萨雷斯 https stackoverflow com users 1026598
  • 如何向 Laravel 工厂传递参数?

    我有一个users表和一对零 一的关系businesses表 users user id gt businesss user id 在我的users表我有一个鉴别器 它告诉我用户是否属于商务类型 因此我需要了解有关的详细信息business
  • iOS Apple TestFlight 版本需要什么样的证书和配置文件?

    我计划通过新的 Apple TestFlight 应用程序在 iOS 8 设备上发布 iPhone 应用程序的测试版 为此需要什么样的证书和配置文件 我需要一个生产证书和分配配置文件 可用的是这些 Certificate Pending D
  • 如何获得 sed 中的第 10 个分组值?

    这是我的 sed sed s a z A Z 0 9 a z A Z 0 9 a z A Z 0 9 a z 10 g 我试图获得第 10 个分组值 但是 它给出的第一个分组值是 0 零 如何获得第10个分组值 能否得到第10个分组值 se
  • JSON 包含条件

    我的设置 Rails 2 3 10 Ruby 1 8 7 假设我有这个代码片段 user User find 1 user to json include gt posts 如果我想包含具有特定条件的用户帖子 例如仅一周前的帖子 怎么办 定
  • 如何跟踪 php 函数/代码的处理持续时间

    我正在开发一个基于浏览器的游戏 我想知道哪些功能需要最多时间来处理等等 你们有人知道我可以从什么开始吗 使用 PHP 5 3 听起来像你想要的xhprof http pecl php net package xhprof 它擅长分析
  • Objectdatasource 和 Gridview:排序、分页、过滤

    我使用实体框架 1 0 并尝试使用可以访问我的外观的对象数据源提供 Gridview 问题是 这似乎特别困难 而且在互联网上还没有看到任何真正能做到我想要它做的事情 对于那些知道的人来说 使用对象数据源提供的网格视图无法自动排序 因此您必须
  • 无法加载资源:服务器响应状态为 403 - Image

    我发现角度和加载图像时遇到一些问题 我从 API 检索图像的链接 并将恢复的链接分配给图像的来源 但是 某些图像无法加载 并且我在 Chrome 控制台中收到以下错误 Failed to load resource the server r
  • UL 列出带有样式十进制数字的项目[重复]

    这个问题在这里已经有答案了 我需要创建一组列表项 其中需要使用边框半径和背景颜色设置列表项编号 小数 的样式 这是我希望列表项的外观的快照 我尝试在 li 上放置边框半径和背景 但我无法获得我正在寻找的输出 这里有一个工作链接 http j
  • 如何迭代 S3 存储桶中的文件?

    我有大量文件 gt 1 000 存储在 S3 存储桶中 我想迭代它们 例如 在for循环 使用以下方法从中提取数据boto3 然而 我注意到 根据http boto3 readthedocs io en latest reference s
  • 如何在不使用 Perl 和 LWP 获取页面的情况下获得最终 URL?

    我正在做一些网页抓取 http en wikipedia org wiki Web scraping使用 Perl 的 LWP 我需要处理一组 URL 其中一些可能会重定向 一次或多次 如何使用 HEAD 方法获得解决所有重定向的最终 UR
  • 在 WPF Tabcontrol 标头模板中显示 SelectedIndex

    我的应用程序中有 1 n 个选项卡控件 具有以下 XAML 设置