WPF使用在样式中声明的元素
本文关键字:声明 元素 样式 WPF | 更新日期: 2023-09-27 18:05:59
我在表单中加入样式和代码时遇到了麻烦:
我的情况如下:
my TabItem style:
<Style TargetType="TabItem" x:Key="testStyle">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Padding" Value="6,2,6,2" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Stretch" />
<Setter Property="MinWidth" Value="5" />
<Setter Property="MinHeight" Value="5" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<DockPanel Width="120" x:Name="rootPanel">
<ContentPresenter ContentSource="Header" RecognizesAccessKey="True" />
<Image x:Name="rootImage"/>
<Label x:Name="rootLabel" FontSize="18" />
</DockPanel>
<ControlTemplate.Triggers>
这里是我应用样式的地方
<TabItem Style="{StaticResource testStyle}">
<TabItem.Header>
</TabItem.Header>
但是:我如何将值设置为我的图像和标签称为rootImage
和rootLabel
?
我假设你有一个名为SomeClass
的类
public class SomeClass
{
public string SomeLabel;
public string SomeImage;
}
现在改变你的风格
<DockPanel Width="120" x:Name="rootPanel">
<ContentPresenter ContentSource="Header" RecognizesAccessKey="True" />
<Image x:Name="rootImage" Source={Binding SomeImage}/>
<Label x:Name="rootLabel" Content={Binding SomeLabel} FontSize="18" />
</DockPanel>
最后:
<TabItem Style="{StaticResource testStyle}" Name="myTabItem">
<TabItem.Header>
</TabItem.Header>
</TabItem>
后面的代码:
myTabItem.DataContext = new SomeClass(); //create a SomeClass with proper label and image
就像您为TabItem
所做的那样,您可以为Image
和Label
指定样式-
<Image x:Name="rootImage" Style="{StaticResource ImageStyle}"/>
<Label x:Name="rootLabel" FontSize="18" Style="{StaticResource LabelStyle}" />
如果你想改变Header
的外观,你需要覆盖HeaderTemplate
而不是整个Template
-
<TabItem.HeaderTemplate>
<DataTemplate>
<StackPanel>
<Image x:Name="rootImage"
Style="{StaticResource ImageStyle}"/>
<Label x:Name="rootLabel" FontSize="18"
Style="{StaticResource LabelStyle}"/>
</StackPanel>
</DataTemplate>
</TabItem.HeaderTemplate>