我正在使用Silverlight 4.我有一个按钮:
<Button Click="addTopicButton_Click">
<Image Source="/PlumPudding;component/Images/appbar.add.rest.png" />
</Button>
看起来很好。但是,当我尝试使用Content
设置其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}" />
按钮为空。这是为什么?
答案 0 :(得分:5)
将Image
等UIElements包含在样式中并不是一个好主意。在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}" />
该按钮现在被赋予DataTemplate
,用于构造呈现按钮内容的子元素。因此,每个按钮将构建一个独立的Image
控件实例。
答案 1 :(得分:1)
您应该使用x:Key来命名Style元素而不是x:Name
答案 2 :(得分:0)
您的代码需要进行两项更改。
将x:Name
更改为x:Key
,并在您想要使用StaticResource
时使用它来引用它。
更改此
<Setter.Value>
<Image Source="whatever..." />
</Setter.Value>
到此,
<Setter.Value>
<DataTemplate>
<Image Source="whatever..." />
</DataTemplate>
</Setter.Value>
看看它对你有帮助!