如何在WPF中为TabItems制作DataTemplate,并在每个TabItem中自定义其内容?
我需要这个:
<TabControl>
<TabControl.ContentTemplate>
<DataTemplate>
<Label Content="Name" Name="label1" />
<TextBox Name="name" />
...
</DataTemplate>
</TabControl.ContentTemplate>
<TabItem Header="Add" Name="tabItem1">
<Grid Height="213">
<Button Content="Add" Name="button1" />
</Grid>
</TabItem>
<TabItem Header="Edit" Name="tabItem2">
<Grid>
<Button Content="Edit" Name="button2" />
</Grid>
</TabItem>
</TabControl>
但按钮未显示(仅限DataTemplate的内容)。
答案 0 :(得分:1)
将重复发生的模板作为资源放在TabControl中,然后使用ContentTemplate
从特定标签ContentPresenter
引用它:
<TabControl>
<TabControl.Resources>
<DataTemplate x:Key="TabTemplate">
<Label Content="Name" Name="label1" />
</DataTemplate>
</TabControl.Resources>
<TabItem Header="Add" Name="tabItem1">
<TabItem.ContentTemplate>
<DataTemplate>
<Grid Height="213">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button Content="Add" Name="button1" />
<ContentPresenter Grid.Row="1" ContentTemplate="{StaticResource TabTemplate}"/>
</Grid>
</DataTemplate>
</TabItem.ContentTemplate>
</TabItem>
<TabItem Header="Edit" Name="tabItem2">
<TabItem.ContentTemplate>
<DataTemplate>
<Grid Height="213">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button Content="Edit" Name="button2" />
<ContentPresenter Grid.Row="1" ContentTemplate="{StaticResource TabTemplate}"/>
</Grid>
</DataTemplate>
</TabItem.ContentTemplate>
</TabItem>
ContentPresenter
以外的所有内容在每个标签中都可以不同...
答案 1 :(得分:1)
您也可以尝试使用TabControl ContentTemplateSelector。
在这里,您可以为选项卡项定义两个或更多不同的模板(用户控件)。 您还可以使用DataTemplateSelector
在运行时决定此操作这是一个博客,其中包含相同的演示:mvvm-using-contenttemplateselector-in-tab-control-view/
最终的TabControl看起来像这样:
<UserControl x:Class="TabControlItemTemplateDemo.View.MyTabControl"
xmlns:ViewModel="clr-namespace:TabControlItemTemplateDemo"
xmlns:View1="clr-namespace:TabControlItemTemplateDemo.View" mc:Ignorable="d" >
<UserControl.Resources>
<DataTemplate x:Key="MyTabHeaderTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Header}" Width="80" Height="25" FontWeight="Bold"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="CountryContentTemplate">
<View1:CountryView DataContext="{Binding CurrentMyTabContentViewModel}"/>
</DataTemplate>
<DataTemplate x:Key="ContinentsContentTemplate">
<View1:ContinentsView DataContext="{Binding CurrentMyTabContentViewModel}"/>
</DataTemplate>
<ViewModel:MyViewSelector x:Key="selector"
CountryTemplate="{StaticResource CountryContentTemplate}"
ContintentsTemplate="{StaticResource ContinentsContentTemplate}" />
</UserControl.Resources>
<DockPanel>
<TabControl ItemsSource="{Binding Tabs}" TabStripPlacement="Left"
BorderThickness="0" Background="White"
ItemTemplate="{StaticResource MyTabHeaderTemplate}"
ContentTemplateSelector="{StaticResource selector}">
</TabControl>
</DockPanel>