0

我在资源字典中有以下样式

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="Button">

            <Grid>
                <Rectangle Fill="#262626" Name="Normal"/>
                <Rectangle Fill="#3f3f41" Name="Hover" Visibility="Hidden"/>
                <Rectangle Fill="#007acc" Name="Pressed" Visibility="Hidden"/>

                <Image Name="Icon"/>
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Grid>

            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="Hover" Property="Visibility" Value="Visible"/>
                    <Setter TargetName="Pressed" Property="Visibility" Value="Hidden"/>
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>
                    <Setter TargetName="Hover" Property="Visibility" Value="Hidden"/>
                </Trigger>
            </ControlTemplate.Triggers>

        </ControlTemplate>
    </Setter.Value>
</Setter>

我需要从我的按钮(在我的 MainWindow.xaml 中)更改名称为“图标”的图像的“源”

        <Button Style="{StaticResource ToolbarButton}">
            <Setter TargetName="Icon" Property="Source" Value=".png"/>
        </Button>

但它给了我错误“源无法识别或不可访问”

如何从按钮更改名称为“图标”的图像的“来源”属性?

4

1 回答 1

2

WPF 控件实际上在行为中运行。按钮不具有图像。虽然按钮是一个内容控件,但您可以将任何内容放入按钮的内容中。

<Button>
<image ... />
</Button

在上面的样式中,您可以使用:

        <Grid>
            <Rectangle Fill="#262626" Name="Normal"/>
            <Rectangle Fill="#3f3f41" Name="Hover" Visibility="Hidden"/>
            <Rectangle Fill="#007acc" Name="Pressed" Visibility="Hidden"/>

            <Image Name="Icon" Source="{TemplateBinding Tag}" />
            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>

        <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter TargetName="Hover" Property="Visibility" Value="Visible"/>
                <Setter TargetName="Pressed" Property="Visibility" Value="Hidden"/>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>
                <Setter TargetName="Hover" Property="Visibility" Value="Hidden"/>
            </Trigger>
        </ControlTemplate.Triggers>

    </ControlTemplate>
</Setter.Value>

现在您可以在 Button 的 Tag 属性中指定 Source

但这不是正确的做法。您应该对支持控件行为的属性使用 TemplateBinding。就像 TemplateBinding 到背景一样,按钮支持它,而按钮不支持图像。

需要帮助请叫我。

于 2012-10-12T03:57:16.100 回答