2010-12-11 22 views
3

J'utilise Silverlight 4. J'ai un bouton:Silverlight: Pourquoi ce style ne fonctionne-t-il pas?

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

Il semble bien. Cependant, lorsque je tente de mettre son Content en utilisant un Style, aucun contenu apparaît:

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

Le bouton est vide. Pourquoi est-ce?

Répondre

1

Vous devez utiliser x: clé pour le nom de votre élément de style plutôt que x: Nom

+0

Ce n'est peut-être pas la réponse complète, mais cela aura certainement une incidence sur le problème. – ChrisF

5

ne est pas une bonne idée d'inclure UIElements tels que Image dans un style. Un tel objet est créé une seule fois lorsque le style est assemblé lors de l'analyse XAML. Une chose importante à comprendre à propos de UIElements est qu'une seule instance ne peut apparaître qu'une seule fois dans l'arbre visuel. Donc, même si votre code fonctionnait, il ne fonctionnerait que pour un bouton, tout autre bouton essayant d'utiliser le même style échouerait.

Au lieu de cela, vous pouvez utiliser la propriété ContentTemplate comme ceci: -

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

Le bouton est maintenant donné une DataTemplate qu'il utilise pour construire l'élément enfant qui rend le contenu du bouton. Chaque bouton va donc construire sa propre instance indépendante d'un contrôle Image.

0

Votre code nécessite deux modifications.

  1. Changé x:Name-x:Key, et référer quand vous voulez l'utiliser, en utilisant StaticResource.

  2. Modifier cette

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

    à cela,

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

Voir si elle vous aide!