Changement de programme icône de bouton dans WPF

J’ai actuellement un bouton avec une icône / image. J’ai configuré le bouton et l’image en XAML:

 

Je dois pouvoir modifier par programmation l’image de ce bouton de playIcon à stopIcon. Comment puis-je faire ceci?

Vous pouvez y parvenir en modifiant le contenu du bouton, via un gestionnaire d’événements.

Vous pouvez définir à la fois les icons “Play” et “Stop” comme ressource, sous Window.Resources manière suivante:

         

Maintenant, lorsque le bouton est cliqué, vous pouvez simplement changer le contenu du bouton en une autre ressource (l’icône d’arrêt). Dans le gestionnaire d’événements du bouton, vous pouvez faire ceci:

C #

 private void Button_Click(object sender, RoutedEventArgs e) { if (MediaButton.Content == FindResource("Play")) { MediaButton.Content = FindResource("Stop"); } else { MediaButton.Content = FindResource("Play"); } } 

Edit: notation plus courte

 MediaButton.Content = FindResource(MediaButton.Content == FindResource("Play") ? "Stop" : "Play"); 

J’espère que cela aide, faites-moi savoir si vous avez d’autres questions.

Si vous avez votre définition d’image quelque chose comme ça:

  

Ensuite, dans votre code où vous voulez faire le changement, il vous suffit de:

 ImageSource = image; 

image est défini comme:

 image = new BitmapImage(new Uri("/Application;component/Resources/pause.png", UriKind.Relative)); 

Bien entendu, cela dépend de l’utilisation du modèle MVVM et de l’implémentation de l’interface INotifyPropertyChanged dans votre code.

Utilisez un DataTrigger (édition) dans le style de l’image (/ édition) à la condition de modification:

  

La variable myCondition serait alors une propriété booléenne dans votre ViewModel (ou, plus généralement, le DataContext du contrôle), quelque chose comme:

 public bool myCondition { get { return ([whatever that condition might be]); } } 

Cela peut également inclure un setter et pourrait aussi bien être une simple propriété auto. Comme avec l’autre réponse MVVM, le ViewModel sera implémenté pour implémenter INotifyPropertyChanged .

La bonne chose est, une fois que la condition n’est plus remplie, le DataTrigger définira automatiquement la propriété Source à sa valeur d’origine.

Disclaimer: Je n’ai aucun moyen de tester cela pour le moment, alors prenez ceci avec un grain de sel et probablement quelques efforts de débogage …

Essayez ce code

 window.Icon = BitmapFrame.Create(Application.GetResourceStream(new Uri("LiveJewel.png", UriKind.RelativeOrAbsolute)).Stream);