【问题标题】:edit style element from button WPF从按钮 WPF 编辑样式元素
【发布时间】:2012-10-12 03:06:16
【问题描述】:

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

<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>

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

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

【问题讨论】:

    标签: wpf xaml styles resourcedictionary


    【解决方案1】:

    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 到背景一样,按钮支持它,而按钮不支持图像。

    如果您还需要什么,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      相关资源
      最近更新 更多