将Image.Source传递给XAML样式

时间:2015-03-09 18:04:42

标签: wpf xaml

我正在尝试实现一种按钮样式,该样式同时包含使用样式时指定的图像和标题。

这是我的风格:

<Style x:Key="ButtonStyle" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid Margin="0,0,0,0" Background="#FF9E9FA3">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Image Source="{TemplateBinding Tag}" Grid.Column="0"/>
                    <Label Content="{TemplateBinding Content}" Grid.Column="1" FontSize="15" VerticalAlignment="Center"/>
                </Grid>             
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我正在使用它:

<Button Tag="edit.png" Content="Edit" Style="{StaticResource ButtonStyle}" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Button Tag="save.png" Content="Save" Style="{StaticResource ButtonStyle}" Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Center"/>

内容按预期工作,两个按钮显示标签中的正确单词,但图像不显示。如果我直接使用ControlTemplate(无样式)并将{TemplateBinding}替换为图像文件名,则会出现图像。

显然我使用的是Tag错误或Image错误。

帮助?

1 个答案:

答案 0 :(得分:4)

如果你替换

,它会起作用
<Image Source="{TemplateBinding Tag}" />

通过

<Image Source="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}"/>

因为然后自动执行从字符串到ImageSource的必要类型转换。