我正在尝试实现一个按钮样式,该样式具有使用该样式时指定的图像和标题。
这是我的风格:
<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>
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
<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"/>
Run Code Online (Sandbox Code Playgroud)
内容按预期工作,两个按钮显示标签中的正确文字,但图像不显示。如果我直接使用 ControlTemplate(无样式)并将 {TemplateBinding} 替换为图像文件名,则图像确实会出现。
显然我使用了错误的标签或错误的图像。
帮助?
如果你更换它就有效
<Image Source="{TemplateBinding Tag}" />
Run Code Online (Sandbox Code Playgroud)
经过
<Image Source="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}"/>
Run Code Online (Sandbox Code Playgroud)
因为这样就会自动执行从字符串到 ImageSource 的必要类型转换。