26

我有一个这样定义的 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”的图像?

谢谢。

4

2 回答 2

44

您不能使用将 Content 属性设置为Image控件的实例,因为这样 Image 可能被多个按钮使用。这将导致“视觉对象已经是另一个视觉对象的子对象”异常。

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

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

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

于 2011-08-30T23:09:47.237 回答
4

在我的应用程序中,我定义了一个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图像已作为资源包含在应用程序中。

于 2011-08-30T23:03:30.560 回答