C#WPF MVVM选项卡项头模板赢得';不行?
我目前正在使用TabControl开发一个应用程序,每个选项卡都有一个ViewModel,它继承自C#WPF MVVM选项卡项头模板赢得';不行?,c#,wpf,mvvm,C#,Wpf,Mvvm,我目前正在使用TabControl开发一个应用程序,每个选项卡都有一个ViewModel,它继承自ITabViewModel,它有两个属性:HeaderText和HeaderImage。我希望从每个ViewModel设置这些。因此,我尝试使用HeaderTemplate样式,但这不起作用。有人能告诉我怎么才能让它工作吗 <TabControl> <TabControl.Resources> <Style TargetType="TabItem
ITabViewModel
,它有两个属性:HeaderText
和HeaderImage
。我希望从每个ViewModel设置这些。因此,我尝试使用HeaderTemplate
样式,但这不起作用。有人能告诉我怎么才能让它工作吗
<TabControl>
<TabControl.Resources>
<Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding HeaderImage}" Height="20" Margin="5, 0"/>
<TextBlock Text="{Binding HeaderText}"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
<TabItem DataContext="{Binding ViewModelStart}">
</TabItem>
<TabItem DataContext="{Binding ViewModelStartupManager}">
</TabItem>
</TabControl>
只需在ItemTemplate部分下定义DataTemplate
<TabControl>
<TabControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
诸如此类的绑定
ItemTemplate是用于格式化ItemsSource中的每个项目以创建标题的模板
我想你至少有两个选择 首先(我假设
ViewModelStart
和viewmodelstartmanager
是属性):
XAML,删除选项卡项的
,并将它们添加到上面的属性中。还将以下属性添加到TabControl
:
ItemsSource="{Binding Tabs}"
您需要为
HeaderTemplate
设置TabItem
的Header
属性才能应用:
<TabItem DataContext="{Binding ViewModelStart}" Header="{Binding}">
</TabItem>
<TabItem DataContext="{Binding ViewModelStartupManager}" Header="{Binding}">
</TabItem>
这项工作:
<TabControl>
<TabControl.Resources>
<Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding HeaderImage}" Height="20" Margin="5, 0"/>
<TextBlock Text="{Binding HeaderText}"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
<TabItem DataContext="{Binding ViewModelStart}" Header="{Binding}">
</TabItem>
<TabItem DataContext="{Binding ViewModelStartupManager}" Header="{Binding}">
</TabItem>
</TabControl>
我本来想做第二个选项,但是除了标题,我如何添加内容?我在每个选项卡中都有很多复杂的元素。我还有一个DockPanel,它在每个选项卡中充当第二个标题,并且具有与标题相同的属性(图像和文本),另外还有一些看起来不错的属性。
<TabItem DataContext="{Binding ViewModelStart}" Header="{Binding}">
</TabItem>
<TabItem DataContext="{Binding ViewModelStartupManager}" Header="{Binding}">
</TabItem>
<TabControl>
<TabControl.Resources>
<Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding HeaderImage}" Height="20" Margin="5, 0"/>
<TextBlock Text="{Binding HeaderText}"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
<TabItem DataContext="{Binding ViewModelStart}" Header="{Binding}">
</TabItem>
<TabItem DataContext="{Binding ViewModelStartupManager}" Header="{Binding}">
</TabItem>
</TabControl>