如何避免采取在资源或资源字典定义有默认样式组合框中的儿童在WPF
问题描述:
风格资源 如何避免采取在资源或资源字典定义有默认样式组合框中的儿童在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"
答
通过设置
<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
主要的事情在这里是绑定出错了。
答
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>
有一个在WPF设计痛苦,我们不能像样式我们用CSS3做的元素。在这种情况下,'Style'可以恰好指向***类型,即使派生类型也可以继承该类型(例如:一种风格定位控件将不能应用于派生自Control的元素)。因此,对于您的场景,除非您事先知道所有类型的动态添加元素,否则您将不会使用纯粹的XAML(没有任何自定义附加属性或使用代码破解后)的优良解决方案。 –