无法让它发挥作用:
<UserControl>
<UserControl.Resources>
<ResourceDictionary>
<Style x:Key="TestStyle" TargetType="{x:Type Button}">
<Setter Property="Button.Content">
<Setter.Value>
<Image Source="D:\Temp\dictionary16.png"/>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</UserControl.Resources>
<StackPanel VerticalAlignment="Top" HorizontalAlignment="Left">
<Button Style="{StaticResource TestStyle}"/>
<Button Style="{StaticResource TestStyle}"/>
</StackPanel>
</UserControl>
此代码抛出以下异常(指向第二个按钮):
指定的元素已经是另一个元素的逻辑子元素。首先断开它。
答案 0 :(得分:18)
该样式创建Image
的一个实例,您不能在这样的两个地方使用它。您可以使用x:Shared
= false
将图像创建为单独的资源,并在样式中引用它,然后在使用该样式的每个位置创建一个新图像。
e.g。
<UserControl>
<UserControl.Resources>
<Image x:Key="img" x:Shared="false" Source="D:\Temp\dictionary16.png" />
<Style x:Key="TestStyle" TargetType="{x:Type Button}">
<Setter Property="Content" Value="{StaticResource img}" />
</Style>
</UserControl.Resources>
<StackPanel VerticalAlignment="Top" HorizontalAlignment="Left">
<Button Style="{StaticResource TestStyle}" />
<Button Style="{StaticResource TestStyle}" />
</StackPanel>
</UserControl>
答案 1 :(得分:11)
昨天我发现了一个有类似问题的用户:WPF - Change a button's content in a style?
这篇文章让我解决了这个问题(因为stackoverflow的8小时限制而无法发布 - .-)
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Image Source="{mcWPF:LangRes imgSettings16, Bitmap}" Height="14"/>
</DataTemplate>
</Setter.Value>
</Setter>
不知道天气这比H.B.的解决方案更干净/更脏/更好