2009-08-20 3 views
27

Je suis un débutant complet à WPF.WPF: rétablir le pinceau par défaut/original

En ce moment je fais un usercontrol pour les éléments de formulaire appelés "LabeledTextbox" qui contient un label, une zone de texte et un bloc de texte pour les messages d'erreur.

Lorsque le code using ajoute un message d'erreur, je veux mettre la bordure de la zone de texte en rouge. Mais, quand l'erreur est supprimée, je voudrais revenir à la bordure par défaut de la zone de texte. Je pense qu'il doit y avoir un moyen très facile de le faire.

Mon code:

(en classe partielle publique LabeledTextbox: UserControl)

public string ErrorMessage 
{ 
    set 
    { 
     if (string.IsNullOrEmpty(value)) 
     { 
      _textbox.BorderBrush = Brushes.Black; //How do I revert to the original color in the most elegant way? 
     } 
     else 
     { 
      _textbox.BorderBrush = Brushes.Red; 
     } 

     _errorMessage.Text = value; 
    } 
} 

Répondre

43

Vous pouvez utiliser

_textBox.ClearValue(TextBox.BorderBrushProperty); 

qui supprimera la valeur attribuée directement et revenir à la valeur définie par le style ou le modèle.

+1

super, merci! * ajoute dependencyproperty research à la liste de choses à faire * –

+0

Merci, article très utile. J'ai essayé de stocker le pinceau par défaut par la méthode brush.clone mais selon .net aucun pinceau n'existe quand son système par défaut. Je vous remercie! – JustinKaz

+2

Cela n'a pas fonctionné pour moi. Je définis l'arrière-plan à Aquamarine quand je veux attirer l'attention. J'ai essayé d'utiliser le ClearValue pour le rétablir mais il est resté comme Aquamarine. En regardant ce post: (http://wpf.2000things.com/tag/clearvalue/) m'a dit que ClearValue le rétablit à la dernière valeur assignée. J'ai donc essayé de définir la propriété Background sur Nothing et cela a fonctionné. L'arrière-plan de l'étiquette était maintenant la couleur par défaut. – tolsen64

0

Est-ce que cela fonctionne? Il est préférable de définir le noir que d'utiliser la méthode ClearValue

public string ErrorMessage 
{ 
    set 
    { 
     if (string.IsNullOrEmpty(value)) 
     { 
      _textbox.Background = Brushes.Black; 
     } 
     else 
     { 
      _textbox.Background = Brushes.Red; 
     } 

     _errorMessage.Text = value; 
    } 
} 
+0

oh désolé, j'ai fait une erreur dans mon message. Ce n'est pas le cas parce que la couleur par défaut est une couleur dégradée. –

+0

@ Thomas Stock: 0 Jamais testé. Donc aussi désolé. –

0

Il vous suffit de stocker les paramètres par défaut. Voici un excample de code.

 System.Windows.Media.Brush save; 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
       { 
      //Store the default background 
     save = testButton.Background; 

     } 


     private void ChangeBackground(){ 

     testButton.Background = Brushes.Red; 

     } 

     private void restoreDefaultBackground(){ 

     //Restore default Backgroundcolor 

     testButton.Background = save; 

     } 
9

Vous pouvez saisir les couleurs par défaut de la classe SystemColors

Voici la liste des toutes les couleurs du système: http://msdn.microsoft.com/de-de/library/system.windows.systemcolors.aspx

couleur de fond par défaut de la zone client:

 _textbox.Background = SystemColors.WindowBrush; 

par défaut couleur du texte dans la zone client:

 _textbox.SystemColors.WindowTextBrush 
+1

Cette réponse est utile dans l'environnement MVVM. Là, je ne peux pas effacer BorderBrushProperty comme dans la bonne réponse par Daniel. Mais définir un arrière-plan de contrôles à son pinceau par défaut fonctionne en renvoyant le pinceau explicitement dans une propriété du viewmodel. – Julian

3

je peux être en retard à la fête, mais pour les futurs lecteurs, vous pouvez également utiliser Button.BackgroundProperty.DefaultMetadata.DefaultValue à cet effet. Ceci est particulièrement utile lorsque vous utilisez un convertisseur où vous devez renvoyer une valeur et ne peut donc pas utiliser l'appel ClearValue().

Questions connexes