gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:38:10 25 4
gpt4 key购买 nike

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>

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

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

最佳答案

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

例子:

<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();
}
}

和 View 模型类:
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;
}
}

关于wpf - 如何在 TabControl.ContentTemplate 中添加新的用户控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1965355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com