Silverlight:为什么这种风格不起作用?

Nic*_*ner 3 silverlight xaml

我正在使用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)

按钮是空的.为什么是这样?

Ant*_*nes 5

将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控件实例.