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

时间:2010-12-11 19:47:45

标签: silverlight xaml

我正在使用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}" />

按钮为空。这是为什么?

3 个答案:

答案 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)

您的代码需要进行两项更改。

  1. x:Name更改为x:Key,并在您想要使用StaticResource时使用它来引用它。

  2. 更改此

    <Setter.Value> 
            <Image Source="whatever..." /> 
    </Setter.Value> 
    

    到此,

    <Setter.Value> 
        <DataTemplate>
            <Image Source="whatever..." /> 
        </DataTemplate>
    </Setter.Value> 
    
  3. 看看它对你有帮助!