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;
où 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);