2010-01-22 2 views
0

Il y a plusieurs endroits dans ma demande WPF où je besoin d'un bouton qui & se sent comme un bouton ordinaire, mais:WPF: Comment créer un "modèle" de bouton qui applique un style et contient une image?

  1. Il montre une icône spécifique sur elle (définie comme {StaticResource EditIcon})
  2. Il applique une style (défini comme {StaticResource GrayOutButtonStyle})

Je préférerais définir ces attributs dans un emplacement unique, plutôt que de les répéter chaque fois que le bouton est utilisé. Quelle est la manière appropriée de le faire dans XAML?

-

Si elle aide, voici ce que je fais actuellement, mais on m'a dit que cela est faux:

Mise à jour: Est-ce la mauvaise façon? Existe-t-il un moyen de résoudre ce problème afin que ce soit la «bonne façon»?

Je définit le bouton comme un modèle avec la EditButton clé:

<ControlTemplate x:Key="EditButton" TargetType="{x:Type Button}"> 
    <Button Style="{StaticResource GrayOutButtonStyle}" 
      Command="{TemplateBinding Command}"> 
     <Image x:Name="editImage" Source="{StaticResource EditIcon}" /> 
    </Button> 
</ControlTemplate> 

Ensuite, je déclare un bouton avec le modèle editButton chaque endroit où je veux l'utiliser dans l'application. J'indique également la commande à invoquer ici:

<Button Template="{StaticResource EditButton}" Command="..." /> 

N'est-ce pas? Quelle serait la bonne façon de faire cela?

+0

Cocher cette réponse: http://stackoverflow.com/a/16539347/760893 – Sonhja

Répondre

0

Une approche différente:

Avez-vous envisagé de réaliser un contrôle personnalisé? De cette façon, vous pouvez créer vos propres attributs pour définir l'image contenue dans le bouton et ne pas avoir à compter sur plusieurs styles.

<myControl:MyButton x:Name="oneButton" ImageSource="MyButton.png" /> 
<myControl:MyButton x:Name="anotherButton" ImageSource="MyOtherButton.png" /> 

class MyButton { 

    private string imageSource; 
    public string ImageSource { 
    get { 
     return this.imageSource; 
    } 
    set { 
     this.imageSource = value; 
     //set the image control's source to this.imageSource 
    } 
    } 
} 
0

Vous pouvez créer un style qui cible tous les boutons de votre application. Ne le faire, il suffit de créer un style sans lui donner une clé:

<Style TargetType={x:Type Button}> 
</Style> 

Ensuite, dans le style, vous pouvez ajouter un setter qui définit la propriété Modèle:

<Setter Property="Template"> 
    <Setter.Value> 
    <!-- whatever you want --> 
    </Setter.Value> 
</Setter> 
+0

Comment utiliser un style pour afficher une image sur le bouton et dire qu'il doit inclure le GrayOutButtonStyle? –

+0

Vous pouvez modifier ControlTemplate pour inclure une image quelque part dans l'arborescence. Par exemple, vous pouvez utiliser une grille avec 2 colonnes, mettre l'image dans la première colonne et un ContentPresenter dans le second. – japf

Questions connexes