我正在使用Silverlight 4.我有一个按钮:
<Button Click="addTopicButton_Click">
<Image Source="/PlumPudding;component/Images/appbar.add.rest.png" />
</Button>
Run Code Online (Sandbox Code Playgroud)
看起来很好.但是,当我尝试Content
使用a 设置时Style
,不会显示任何内容:
<Style x:Name="AddButton" TargetType="Button">
<Setter Property="Content">
<Setter.Value>
<Image Source="/PlumPudding;component/Images/appbar.add.rest.png" />
</Setter.Value>
</Setter>
</Style>
<Button Click="addTopicButton_Click" Style="{StaticResource AddButton}" />
Run Code Online (Sandbox Code Playgroud)
按钮是空的.为什么是这样?
将UIElements包括Image
在一个风格中并不是一个好主意.在Xaml解析期间将样式放在一起时,只创建一次这样的对象.理解UIElements的一个重要事情是单个实例只能在Visual Tree中出现一次.所以即使你的代码工作它只适用于一个按钮,任何其他试图使用相同样式的按钮都会失败.
相反,你可以使用这样的ContentTemplate
属性: -
<Style x:Key="AddButton" TargetType="Button">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Image Source="/PlumPudding;component/Images/appbar.add.rest.png" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<Button Click="addTopicButton_Click" Style="{StaticResource AddButton}" />
Run Code Online (Sandbox Code Playgroud)
现在,该按钮被赋予一个DataTemplate
用于构造呈现按钮内容的子元素的按钮.因此,每个按钮将构建其自己的独立Image
控件实例.