Wpf basculer le contenu du bouton sur clic

Je veux changer le contenu du bouton dépend du lick de contenu précédent si son Ajouter le devrait changer dans Enregistrer et si sa sauvegarde alors il devrait changer à Ajouter. Je sais comment changer le contenu d’un bouton mais comment puis-je lire le contenu à modifier.

Stockez la valeur du dernier clic dans la propriété tag de ce bouton et vérifiez sa valeur lors du clic.

Description du tag

Obtient ou définit une valeur d’object arbitraire pouvant être utilisée pour stocker des informations personnalisées sur cet élément.

Lien MSDN

OU

void MyButton_OnClick(object sender, RoutedEventArgs e) { if(mybutton.Content.ToSsortingng() == "Add") { \\ Lines for add mybutton.Content = "Save"; } else { \\ Lines for Save mybutton.Content = "Add"; } } 

Si vous utilisez MVVM, liez le contenu à une valeur et associez la commande à la fonction.

  

Bien entendu, Ssortingng ButtonText et ButtonClickCommand sont des propriétés dans votre ViewModel.

 private ssortingng _ButtonText; public ssortingng ButtonText { get { return _ButtonText ?? (_ButtonText = "Add"); } set { _ButtonText = value; NotifyPropertyChanged("ButtonText"); } } private ICommand _ButtonClickCommand; public ICommand ButtonClickCommand { get { return _ButtonClickCommand ?? (_ButtonClickCommand = _AddCommand); } set { _ButtonClickCommand = value; NotifyPropertyChanged("ButtonClickCommand"); } } private ICommand _AddCommand = new RelayCommand(f => Add()); private ICommand _SaveCommand = new RelayCommand(f => Save()); private void Add() { // Add your stuff here // Now switch the button ButtonText = "Save"; ButtonClickCommand = SaveCommand; } private void Save() { // Save your stuff here // Now switch the button ButtonText = "Add"; ButtonClickCommand = AddCommand; } 

Ensuite, vous pouvez faire en sorte que ButtonClickCommand change les propriétés et la liaison s’occupe de tout.

Vous pouvez également utiliser un ToggleButton avec EventTriggers pour exécuter les différentes méthodes pour les états Checked et Unchecked.

           

Vous pouvez également utiliser un style pour modifier le modèle ToggleButton et modifier le texte de l’état coché. Pour ce faire, obtenez une copie du style ToggleButton et, dans VisualState Checked, ajoutez ceci au storyboard:

    Save    

Si vous préférez ne pas suivre cette voie, vous pouvez l’append à vos déclencheurs vérifiés:

  

Pour utiliser ces approches, vous aurez besoin d’une référence aux fichiers binarys Microsoft.Expression.Interactions et System.Windows.Interactivity à partir de C: \ Program Files (x86) \ Microsoft SDKs \ Expression \ Blend.NETFramework \ v4.5 \ Libraries.

Votre application serait mieux conçue si vous AddButton 2 boutons AddButton et SaveButton , et que vous les AddButton ou les SaveButton respectivement (en utilisant la propriété Visibility )

Pourquoi? C’est un compteur de séparation des préoccupations. Par exemple, dans le gestionnaire de clics, vous n’avez pas besoin de vérifier le mode dans lequel vous vous trouvez, car vous disposerez de gestionnaires distincts. Vous voudrez également que les boutons aient des icons différentes, des infobulles différentes, etc.

Je suis d’accord avec Surfens pour répondre que la question n’est pas un exemple parfait pour un ToggleButton parce que “Save” et “Add” sont des opérations très différentes qui devraient avoir chacune leur propre “ICommand” définie sur le bouton respectif.

Mais voici un style qui changera le contenu en fonction de la valeur IsChecked du ToggleButton.

Le contenu sera “ValueForUnToggledState” si le bouton n’est pas coché et passe à “ValueForToggledState” quand il est coché.

      

C’est plus WPF que certaines des autres réponses.