从按钮WPF编辑样式元素

时间:2012-10-12 03:06:17

标签: wpf xaml styles resourcedictionary

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

         

<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内)更改名称为“Icon”的图像的“Source”

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

但它给我的错误是“来源未被识别或无法访问”

如何从按钮更改名称为“Icon”的图像的“Source”属性?

1 个答案:

答案 0 :(得分:2)

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

<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 to Background一样,按钮支持它,而按钮不支持Image。

如果您还有其他需要,请告诉我。