我想更改作为默认Label控件的子控件的Border控件的属性。我有以下样式,除了边框控件的更改之外的所有内容都显示在UI
中<Style x:Key="StandardLabel" TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type Label}}">
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="ContentStringFormat" Value="{}{0:0.000}"/>
<Setter Property="Height" Value="25"/>
<Setter Property="Margin" Value="0"/>
<Style.Resources>
<Style TargetType="{x:Type Border}" >
<Setter Property="Padding" Value="3"/>
</Style>
</Style.Resources>
</Style>
我用这个answer作为我尝试的基础,但它似乎对我不起作用。对我做错了什么的想法?
答案 0 :(得分:1)
如果您拥有与我相同的默认Label
模板,则边框会通过属性设置填充,由于dependency property value precedence,该属性将覆盖样式中的任何内容。
<ControlTemplate TargetType="{x:Type Label}">
<Border
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}"
SnapsToDevicePixels="true"
>
但是,请查看该属性使用的值:Padding="{TemplateBinding Padding}"
所以它会使用其模板化父级所拥有的Padding
。这是Label
。所以这应该做你想要的:
<Style x:Key="StandardLabel" TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type Label}}">
<Setter Property="Padding" Value="3" />
这适用于Border
TemplateBinding
属性为Label
的任何属性。其他任何事情(如果Border
有任何有用的属性尚未考虑),您可以使用本地隐式样式方法;我使用默认样式的副本对其进行了测试,并从模板中的Border中删除了Background
属性:
<Style x:Key="LabelStyle1" TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type Label}}">
<Style.Resources>
<Style TargetType="Border">
<Setter Property="Background" Value="LightSkyBlue" />
</Style>
</Style.Resources>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Label}">
<Border
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}"
SnapsToDevicePixels="true"
>