2010-12-11 47 views
3

我使用Silverlight 4,我有一个按钮:Silverlight:为什么这种风格不起作用?

 <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}" /> 

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

回答

1

你应该使用X:关键命名风格元素,而不是X:名称

+0

这可能不是全部答案 - 但它肯定会对问题有所影响。 – ChrisF 2010-12-12 17:57:53

5

它不是一个好主意,包括UI元素,例如在样式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}" /> 

按钮现在因为它用来构造呈现按钮的内容的子元素DataTemplate。因此,每个按钮将构建一个自己的独立实例,即一个Image控件。

0

您的代码需要两个更改。

  1. 改变x:Namex:Key,而当你要使用它,使用StaticResource参考。

  2. 更改此

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

    此,

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

看看它可以帮助你!

相关问题