2010-12-11 6 views
3

私がボタンを持っているのSilverlight 4を使用しています:Silverlight:なぜこのスタイルは機能しませんか?

 <Button Click="addTopicButton_Click"> 
      <Image Source="/PlumPudding;component/Images/appbar.add.rest.png" /> 
     </Button> 

それは正常に見えます。私はStyleを使用して、そのContentを設定しようとすると、しかし、何のコンテンツは表示されません:

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

ボタンは空です。どうしてこれなの?このようなスタイルでImageなどのUIElementを含めること

答えて

1

あなたは、xを使用する必要があります。このようなオブジェクトは、Xamlの解析中にスタイルがまとめられたときに1回だけ作成されます。 UIElementsを理解する上で重要なことは、1つのインスタンスをビジュアルツリーに1回しか表示できないことです。したがって、コードが機能しても、それは1つのボタンに対してのみ機能し、同じスタイルを使用しようとする他のボタンは失敗します。

代わりに、あなたがこのよう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

答え全体ではないかもしれませんが、それは確かに問題に関係しています。 – ChrisF

5

そのない良いアイデアに名前を付けます。xのではなく、あなたのスタイル要素に名前を付けるキー:

0

コードには2つの変更が必要です。

  1. x:Keyx:Nameを変更し、あなたがStaticResourceを使用して、それを使用したい場合、それを参照してください。この本に

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

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

それはあなたを助けている場合を参照してください

  • 変更!

  • 関連する問題