2017-11-03 63 views
0

风格资源 如何避免采取在资源或资源字典定义有默认样式组合框中的儿童在WPF

 <Setter Property="Background" Value="Red"/> 

    </Style>enter code here 
</Window.Resources> 

在窗口我加入了与孩子的标签一组框定义。

<Grid> 
    <GroupBox Header="Header"> 
     <GroupBox.Resources> 

       <Style TargetType="{x:Type GroupBox}"> 
       <Setter Property="Background" Value="white"/> 
      </Style> 
     </GroupBox.Resources> 
     <Label Content="dsfdsfdsf" Foreground="Black" /> 
    </GroupBox> 
</Grid> 

我的预期结果是背景为白色的标签。但实际上它正在采取红色背景

(即在资源的风格定义)如果我设置标签的样式,以明确是NULL,它工作正常

Label Content="dsfdsfdsf" Foreground="Black" Style={x:Null} 

而是控制到分组框动态添加,所以我要设置
Style={x:Null}到被添加到组框体

,如果我在Label标签内容不设置正在添加到OverrideDefalutStyle真正的全儿童............... .......

Label Content="dsfdsfdsf" Foreground="Black" OverridesDefaultStyle="True" 
+0

有一个在WPF设计痛苦,我们不能像样式我们用CSS3做的元素。在这种情况下,'Style'可以恰好指向***类型,即使派生类型也可以继承该类型(例如:一种风格定位控件将不能应用于派生自Control的元素)。因此,对于您的场景,除非您事先知道所有类型的动态添加元素,否则您将不会使用纯粹的XAML(没有任何自定义附加属性或使用代码破解后)的优良解决方案。 –

回答

0

通过设置

<Style TargetType="{x:Type GroupBox}"> 
    <Setter Property="Background" Value="White"/> 
</Style> 

你将设置你的组框和组框本身为白色内的所有GroupBox控制的背景。

所以,如果你想设置/覆盖您的GroupBox内的所有标签的背景如果你想重置Label的样式属性只是添加只需添加一个额外的样式为您的分组框定位Label

<Style TargetType="{x:Type Label}"> 
    <Setter Property="Background" Value="White"/> 
</Style> 

一个空的样式定义您的GroupBox

<Style TargetType="{x:Type Label}"/> 

另一个方法是在你的使用上りSK :)

如果你只想要重置的背景颜色,你可以这样做伎俩/黑客重置:

<Style TargetType="{x:Type Label}"> 
    <Setter Property="Background" Value="{Binding Background.DefaultValue, RelativeSource={RelativeSource Self}}" /> 
    <Setter Property="Foreground" Value="Black" /> 
</Style> 

提示:相反Background.DefaultValue的你也可以写Background.ABC主要的事情在这里是绑定出错了。

0

GroupBox.Resources中的样式对GroupBox本身没有影响。隐含的GroupBox风格是它最接近VisualTree的祖先之一。你把这种风格放在错误的地方。

或者使用样式属性,而不是

<Grid> 
    <GroupBox Header="Header"> 
     <GroupBox.Style> 

       <Style TargetType="{x:Type GroupBox}"> 
       <Setter Property="Background" Value="white"/> 
      </Style> 
     </GroupBox.Style> 
     <Label Content="dsfdsfdsf" Foreground="Black" /> 
    </GroupBox> 
</Grid>