在样式中设置一个图片作为Button的内容。

问题描述 投票:26回答:2

我有一个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 "的图片?

谢谢,我有一个WPF按钮是这样定义的:样式是这样的:我如何改变样式来指定内容使用名为 "revert.png "的图片?

wpf xaml datatemplate staticresource
2个回答
41
投票

你不能使用设置Content属性为一个实例的 Image 控件,因为这样的话,该图像可以被多个Button使用。这将导致 "visual已经是另一个visual的子代 "的异常。

相反,你可以使用一个DataTemplate,就像这样。

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

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


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 如果你要使用的图片已经作为资源包含在应用程序中。

© www.soinside.com 2019 - 2024. All rights reserved.