样式按钮图像仅适用于最后一项

时间:2013-02-07 13:09:02

标签: wpf

我有一种风格

<Style x:Key="HomeButtonStyle" TargetType="Button">
    <Setter Property="Height" Value="32"/>
    <Setter Property="Width" Value="32"></Setter>
    <Setter Property="Content">
        <Setter.Value>
            <Image Source="/Images/HOME.png"></Image>
        </Setter.Value>
    </Setter>
</Style>

我在控件中有一些xaml

    <StackPanel Grid.Row="0" Orientation="Horizontal">
        <Button Style="{DynamicResource HomeButtonStyle}" />
        <Button Style="{DynamicResource HomeButtonStyle}" />
        <Button Style="{DynamicResource HomeButtonStyle}" />
        <Button Style="{DynamicResource HomeButtonStyle}" />
    </StackPanel>

然而,图像仅显示在最后一个按钮中。

我的问题是为什么?以及如何在所有按钮中显示图像?

2 个答案:

答案 0 :(得分:6)

在您的风格中,您应该直接设置ContentTemplate而不是Content

<Setter Property="ContentTemplate">
  <Setter.Value>
     <DataTemplate>
       <Image Source="/Images/HOME.png"></Image>
     </DataTemplate>
    </Setter.Value>
</Setter>

答案 1 :(得分:3)

<Image x:Key="HomeImage" x:Shared="false" Source="/Images/Home.jpg" />
<Style x:Key="HomeButtonStyle" TargetType="Button">
    <Setter Property="Height" Value="32"/>
    <Setter Property="Width" Value="32"></Setter>
    <Setter Property="Content" Value="{StaticResource HomeImage}" />
</Style>

您的代码正在重复使用已添加到另一个可视树中的图像控件。使用x:shared每次都创建一个新的Image控件实例,一切都会好的。更多信息here