按样式设置Button的内容

时间:2011-08-30 22:53:04

标签: wpf

我有一个像这样定义的WPF按钮:

<Button Style="{StaticResource RevertButtonStyle}" />

这是样式的样子:

<Style x:Key="RevertButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Height" Value="25" />
    <Setter Property="Width" Value="20" />
    <Setter Property="Margin" Value="3,0,0,0" />
</Style>

如何更改样式以指定内容以使用名为“revert.png”的图像?

谢谢,

2 个答案:

答案 0 :(得分:37)

您不能将Content属性设置为Image控件的实例,因为Image可以由多个Button使用。这将导致“视觉已经是另一个视觉的孩子”例​​外。

相反,您可以像这样使用DataTemplate:

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

显然,您可能需要调整图片的源URI。

答案 1 :(得分:3)

在我的应用程序中,我定义了一个ImageButton控件,用于指定ImageSource属性。

这样的风格如下:

<Style TargetType="{x:Type controls:ImageButton}">
    <Setter Property="ForceCursor" Value="True" />
    <Setter Property="Cursor" Value="Hand" />

    <Setter Property="ToolTip" Value="{Binding Path=Caption, RelativeSource={RelativeSource Mode=Self}}" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type controls:ImageButton}">
                <Image Width="16" Height="16" Source="{Binding Path=ImageSource, RelativeSource={RelativeSource Mode=TemplatedParent}}" Name="image" />

                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="image" Property="Opacity" Value="0.3" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

但在您的情况下,如果您想对具有特定Button集的所有Style个对象使用相同的图片,则只需在<Image Source="pack://application:,,,/My.Assembly.Name;component/Icons/revert.png" />中使用Template即可如果您要使用的图像已作为资源包含在应用程序中。