我定义了一个自定义WPF样式。我想网格中的任何按钮都是红色的。但如果我定义这种风格,整个网格是红色的 !!为什么?我明确定义了Button.Background。
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style x:Key="MyStyle">
<Setter Property="Button.Background" Value="Red" /> <!-- Only inner buttons -->
</Style>
</Window.Resources>
<Grid Style="{StaticResource MyStyle}">
<Button Content="Go" Margin="29,36,385,239" />
</Grid>
</Window>
答案 0 :(得分:1)
为了实现您的目标,我认为您必须在Style
内定义内部Style.Resources
。这将使Button
中的所有Grid
选择“内部”Style
,除非他们明确使用其他Style
<Window.Resources>
<Style x:Key="MyStyle">
<Style.Resources>
<!-- Only inner buttons -->
<Style TargetType="Button">
<Setter Property="Background" Value="Red" />
</Style>
</Style.Resources>
</Style>
</Window.Resources>
<Grid Style="{StaticResource MyStyle}">
<Button Content="Go" Margin="29,36,385,239" />
</Grid>
由于Button.Background
不是附加属性(与TextBlock.Foreground
不同),Background
将不会应用于Button
Grid
}。
但至于“为什么Grid
拿起Background
”我无法告诉你。这对我来说似乎是个错误。 Button
的背景继承自Control
,Grid
的背景继承自Panel
,所以目前为止我可以看到,Grid
不应该使用该值,但我可能会遗漏某些内容
另外,如果您尝试直接在Button.Background
Grid
,则会出现以下错误
错误MC3015:附加属性 'Button.Background'未定义 '网格'或其基类之一。
答案 1 :(得分:0)
无法将TargetType设置为按钮,以便此样式仅应用于Button?
<Style x:Key="MyStyle" TargetType="Button">
<Setter Property="Background" Value="Red" />
</Style>
答案 2 :(得分:0)
可悲的是,风格并不像那样。如果您有一个已知的子集合,您可以欺骗(丑陋):
<Setter Property="{Binding RelativeSource={RelativeSource Self} Path=Children[0].Background}" Value="Red" />
当然,这只有在你了解儿童指数时才有效,而且非常脆弱。我不确定它是否适用于你的情况b / c你说必须将样式应用于网格,所以我猜测网格内容是动态生成的。