基于下面的xaml,是否有人知道为什么如果我创建2个(或更多)按钮(具有隐式样式),其中只有1个实际显示内容,但都显示蓝色边框。
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="1">
<ContentPresenter Content="{TemplateBinding Content}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="BorderBrush" Value="Blue"/>
<Setter Property="Content">
<Setter.Value>
<Grid Background="Firebrick"/>
</Setter.Value>
</Setter>
</Style>
检查后面的代码,所有3个按钮都具有完全相同的内容,但它只显示在其中一个上
if (a.Style == b.Style && a.Style == c.Style)
{
if (a.Content == b.Content && a.Content == c.Content)
{
// comes in here!
}
}
答案 0 :(得分:1)
Clemens和ASh提到的问题是内容中的网格不能超过1个父级。
解决方法是使用DataTemplate并将元素的ContentTemplate设置为DataTemplate(如下面的主题所述)。
答案 1 :(得分:0)
我已经通过按钮图像遇到了这个问题。这与您定义Content
属性而不是Template
属性的样式相关联。通过设置Content
属性,您不需要定义对某些内容的引用,也不要求WPF为每个项创建一个新对象,这意味着只有使用该样式呈现的最后一个元素才会设置为Content
。
所以你想要做的是,如果你打算为每个按钮设置一个内容,设置ContentTemplate
属性。如果您实际上只想更改Template
的方面,请设置Button
属性。
例如使用Template属性:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1">
<ContentPresenter Content="{TemplateBinding Content}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="BorderBrush" Value="Blue" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid Background="Firebrick" />
</ControlTemplate>
</Setter.Value>
</Setter>