Button的Template如下:
<ControlTemplate x:Key="DeviceButtonV2" TargetType="Button">
<DockPanel x:Name="DP">
<Image x:Name="DeviceIcon" Source="/icons/设备.png" Stretch="None"/>
<StackPanel>
<Label Height="6"/>
<Label x:Name="DeviceInfo" Content="{Binding Path=Content, RelativeSource={RelativeSource AncestorType=Button}}"/>
</StackPanel>
</DockPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="DP" Property="Background" Value="AliceBlue"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="DeviceIcon" Property="Source" Value="/icons/设备不可用.png"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
具体的使用如下:
<Button Template="{StaticResource DeviceButtonV2}">
<StackPanel>
<TextBlock Text="[ TC-0342-32A ]"/>
<TextBlock Text="SMT贴片机"/>
</StackPanel>
</Button>
现在的问题是,我无法通过设置DeviceInfo这个Label的样式来达到修改实际Button中的两个TextBlock的样式。也就是说,无论在
<Label x:Name="DeviceInfo" Content="{Binding Path=Content, RelativeSource={RelativeSource AncestorType=Button}}"/>
中如何设置样式(比如字体大小等),实际按钮中文字的样式不会有任何变化。
如何解决这个问题?
我知道这应该是由于设置的元素不匹配的问题,也就是说我在Template中只能设置到Lable这一层,而实际Button中的TextBlock是Lable的子元素。是不是可以这样说,我无法在Template中直接对这个TextBlock的样式进行修改?
是的 content是外部元素
label里设置Textblock.Fontsize,但这种属性有限,没搞懂你为什么放label却设置textblock的样式,那还不如干脆用textblock