如何在TabControl.ContentTemplate中添加新的用户控件?

2024-04-04

我不太愿意在中添加用户控件的新实例TabControl.ContentTemplate?

我的 Xaml 在这里:

<TabControl ItemsSource="{Binding Tables}">
    <TabControl.ItemTemplate>
        <DataTemplate>

        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate DataType="{x:Type uc:mytest1}">
            <uc:mytest1>

            </uc:mytest1>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

我正在绑定TabControl.ItemsSource财产给ObservableCollection在内容模板中,我添加了一个用户控件,但是当这个应用程序运行时,我得到的新项目为TabItem但内容页面持有相同的用户控件,但我希望为每个新的用户控件添加新的用户控件TabItem.

我对 WPF 很陌生,可能我犯了一个非常基本的错误,请指导我。


The ControlTemplate确定不属于各个选项卡项的选项卡控件元素的外观。这ItemTemplate处理各个选项卡项目的内容。另外,一个TabItem是一个带标题的内容控件,这意味着它有两个内容类型属性Content and Header有两个单独的模板ContentTemplate and HeaderTemplate。为了能够使用绑定填充选项卡项目,您需要设置样式TabItem使用上述属性。

Example:

<Window x:Class="Example.Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Name="Window"
    Title="Window2" Height="300" Width="300">
    <Window.DataContext>
        <Binding ElementName="Window" Path="VM"/>
    </Window.DataContext>
    <Window.Resources>
        <DataTemplate x:Key="TabItemHeaderTemplate">
            <Grid>
                <TextBlock Text="{Binding Header}"/>
                <Ellipse Fill="Red" Width="40" Height="40" Margin="0,20,0,0"/>
            </Grid>
        </DataTemplate>
        <DataTemplate x:Key="TabItemContentTemplate">
            <Ellipse Fill="Green"/>
        </DataTemplate>
        <Style x:Key="TabItemContainerStyle" TargetType="TabItem">
            <Setter Property="Header" Value="{Binding}"/>
            <Setter Property="HeaderTemplate" 
                    Value="{StaticResource TabItemHeaderTemplate}"/>
            <Setter Property="Content" Value="{Binding}"/>
            <Setter Property="ContentTemplate" 
                    Value="{StaticResource TabItemContentTemplate}"/>
        </Style>
    </Window.Resources>
    <Grid>
        <TabControl ItemsSource="{Binding Items}" 
                    ItemContainerStyle="{StaticResource TabItemContainerStyle}"/>
    </Grid>
</Window>

背后的代码:

public partial class Window2 : Window
{
    public TabControlVM VM { get; set; }

    public Window2()
    {
        VM = new TabControlVM();
        InitializeComponent();
    }
}

和视图模型类:

public class TabControlVM
{
    public ObservableCollection<TabItemVM> Items { get; set; }

    public TabControlVM()
    {
        Items = new ObservableCollection<TabItemVM>();
        Items.Add(new TabItemVM("tabitem1"));
        Items.Add(new TabItemVM("tabitem2"));
        Items.Add(new TabItemVM("tabitem3"));
        Items.Add(new TabItemVM("tabitem4"));
    }
}

public class TabItemVM
{
    public string Header { get; set; }

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

如何在TabControl.ContentTemplate中添加新的用户控件? 的相关文章

随机推荐

  • 如何使用 C# 唯一标识 USB 密钥?

    我希望能够检测到 USB 密钥何时插入 此外 如果我能够区分 USB 密钥 A 和 USB 密钥 B 那么我的状态就更好了 最后 如果我可以使用某种硬件序列号 MAC 地址或其他任何方式唯一地识别密钥 那么我就处于最佳状态 基本上 我正在考
  • iOS QuickType 栏:添加自定义建议

    我想根据我的应用程序的用户添加自定义建议 例如 假设它是游戏 然后根据他与之交互的用户 理想情况下 这些建议应在输入字段仍为空时显示 知道该怎么做吗 None
  • 无法加载文件或程序集或其依赖项之一。该系统找不到指定的文件

    我有这样的代码 public static Type ToType XmlSerializableType xmlSerializableType string func XmlSerialzationType ToType Type ty
  • 缩小以适应 Flexbox 或 Flex-basis 中的内容:内容解决方法?

    我有一个网络应用程序 我使用 Flexbox 进行布局 我试图既填充屏幕 它是一个应用程序 而不是文档 又尽可能不指定任何固定的宽度或高度 因为内容可能是各种各样的东西 完全流畅的布局 梦想 因此 我需要流体高度 全宽页眉和页脚 然后中间的
  • Golang将interface{}转换为struct

    我想改进下面代码中的 getCustomerFromDTO 方法 我需要从 interface 创建一个结构 目前我需要将该接口编组到 byte 然后将数组解组到我的结构 必须有更好的方法 我的用例是通过rabbitmq 发送结构 并使用这
  • 奇怪的 var_dump 行为

    我有以下代码行 var dump array 在一个文件中 它输出如下 array size 0 empty 在第二个文件中 它输出 string pre class xdebug var dump b array b i size 0 i
  • 使用 OpenCSV 从 csv 读取流数据

    我有加速度计和陀螺仪传感器流数据 保存在下载文件夹中 我想实时读取所有数据或逐行读取数据流 但我无法超出第一行 try CSVReader reader newCSVReader newFileReader path getAbsolute
  • 保护 Django 站点中的静态媒体访问

    我正在建立一个注册用户可以上传文件的网站 然后通过 Apache 提供这些文件 只有登录的用户才应该能够访问这些文件 我读过了这一页 http docs djangoproject com en dev howto apache auth
  • 如何通过字符和字数检测字符串中是否包含印地语 (devnagri)

    下面是一个示例字符串 string abcde abcde 我需要检查该字符串是否包含任何印地语 梵文 内容 如果包含 则检查字符和单词的数量 我猜带有 unicode 字符类的正则表达式可以工作http www regular expre
  • 使用 ggplot2 绘制发散堆积条形图

    有没有办法使用ggplot2创建发散的堆积条形图 如下图右侧所示 可重现示例的数据 library ggplot2 library scales library reshape dat lt read table text ONE TWO
  • 如何检查 MPMediaItem 是否仅包含音频的 MPMediaType?

    我希望我需要进行按位比较 但我不清楚 Objective C 语法是如何完成的 MPMediaType 的枚举定义如下 我需要做的是确保 MPMediaItem 根本不是视频 因为尽管我使用媒体查询过滤到 MPMediaTypeAnyAud
  • 使用 C# 在预先打印的纸张表单上的特定位置打印文本

    我需要在打印纸的特定位置打印纸张文本 原因是打印是在已打印的表单上完成的 其中包含名字和姓氏等字段 因此 当我得到这个人的名字时 它应该以纸质形式打印在分配的空间内 想知道是否有任何现有的库允许我使用 X 和 Y 坐标等坐标系在特定位置进行
  • Maven - 在 Eclipse 中抑制覆盖托管版本警告

    我在用spring boot 并且遇到了类似于所描述的错误here https stackoverflow com q 14730329 2860319 我将以下内容添加到我的 pom xml 中
  • 逆向工程iOS天气应用程序UI组件[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在尝试写下 iOS 天气应用程序的摘要 我感兴趣的主要组件在下图中标记为 1 2 3 4 和 5 UI 应获取如下 一个 ViewContr
  • 如果行中的特定单元格不为空,则格式化整行

    我想根据其中的特定单元格是否为空来格式化整行 我希望条件格式能够遍历所有行 并在该行中的 C 列不为空时添加背景颜色 我该如何解决 为了说明假设 整行 包含 A Z 列 请尝试格式 条件格式 自定义公式是 C1 lt gt 与您选择的格式和
  • 何时使用表达式混合创建用户控件

    因此 我正在开发一个新应用程序 并且我正在使用 Expression Blend 第一次 来创建布局和样式等 但我有一个关于何时要创建用户控件的问题 我有一个蛀虫 我想用它作为很多东西的背景 但它实际上是边框中的边框 然后我们将把任何控件放
  • 如何使用 Exchange Web 服务 (EWS) API 通过共享邮箱发送电子邮件

    我正在使用 MS Exchange Web 服务 API 通过共享邮箱发送电子邮件 发送电子邮件可以工作 但它们不会保存在已发送的项目中 如下所示 手动执行此操作 项目保存在已发送项目中 但通过我的代码不会保存它们 using Micros
  • 循环变量文件名[重复]

    这个问题在这里已经有答案了 我正在使用 Fortran 对分成许多文件的庞大数据集进行计算 文件的名称是 maltoLyo12per reimage set1 traj maltoLyo12per reimage set2 traj mal
  • 使用 angularjs 将多个对象发送到 webapi

    我的 ASP NET WebApi 应用程序中有以下控制器 Route api PutItem HttpPut public IHttpActionResult PutItem Guid id Item item if ModelState
  • 如何在TabControl.ContentTemplate中添加新的用户控件?

    我不太愿意在中添加用户控件的新实例TabControl ContentTemplate 我的 Xaml 在这里