2017-06-14 69 views
0

我想更改作爲默認Label控件的子項的Border控件的屬性。我有以下的風格,一切都只是在我使用這個answer作爲我努力的基礎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> 

正在顯示的改變邊境控制,但它似乎並沒有爲我工作。有什麼想法我做錯了什麼?

回答

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" /> 

這將對於其中BorderTemplateBindingLabel的任何財產的工作。還有其他的(如果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" 
        > 
+0

你看那個......我做它的方式更加混亂,它必須是。謝謝您的幫助。 – PlTaylor

+1

WPF已經比它需要更混亂! –

+0

出於好奇,你如何查看你的默認模板? – PlTaylor

相關問題