2010-12-12 40 views
1

Je le code suivant pour créer dynamiquement et ajouter un bouton à un panneau:Modification dynamique créé l'arrière-plan bouton WPF

StackPanel topPanel=...; 
Button button=new Button(); 

button.Content="New Button "+topPanel.Children.Count;  

// Set button background to a red/yellow linear gradient 
// Create a default background brush 
var bgBrush=new LinearGradientBrush(new GradientStopCollection(
    new GradientStop[] {new GradientStop(Color.FromRgb(255,255,200),0.5), 
         new GradientStop(Color.FromRgb(255,200,200),0.5)})); 
// Create a more intense mouse over background brush 
var bgMouseOverBrush=new LinearGradientBrush(new GradientStopCollection(
    new GradientStop[] {new GradientStop(Color.FromRgb(255,255,100),0.5), 
         new GradientStop(Color.FromRgb(255,100,100),0.5)})); 

// Set the button's background 
button.Background=bgBrush; 
// Dynamically, add the button to the panel 
topPanel.Children.Add(button); 

Le problème est que lorsque je déplace le curseur de la souris sur le bouton, il revient à son arrière-plan bleu clair. Maintenant, j'ai lu que ce dont j'ai besoin est un déclencheur de bouton de souris, mais je n'ai aucune idée de comment faire cela par programmation uniquement pour ce bouton, seul. Fondamentalement, je veux que son arrière-plan change à bgMouseOverBrush lorsque le curseur de la souris est dessus et revenir à bgBrush quand il ne l'est pas.

Répondre

2

Essayez ceci:

// In the constructor or any approp place 
    button.MouseEnter += new MouseEventHandler(b_MouseEnter); 
    button.MouseLeave += new MouseEventHandler(b_MouseLeave); 

    void b_MouseLeave(object sender, MouseEventArgs e) 
    { 
     button.Background=bgBrush; 
    } 

    void b_MouseEnter(object sender, MouseEventArgs e) 
    { 
     button.Background = bgMouseOverBrush; 
    } 

espoir qui aide.

EDIT

Souris Entrez MouseOver

Souris Out Mouse Out

+0

Non, cela ne fonctionne pas. Apparemment, le bouton remplace l'arrière-plan défini dans le gestionnaire d'événements MouseEnter juste après qu'il a été modifié avec le déclencheur de propriété de dépendance IsMouseOver, qui définit l'arrière-plan sur le chrome par défaut. Un déclencheur de style ou quelque chose comme ça est nécessaire ici. –

+0

Salut Michael, j'ai effectivement testé avec les mêmes valeurs de dégradé et j'ai trouvé que ça marchait très bien (Screen Captures attaché à la réponse). Êtes-vous sûr de ne pas réinitialiser les valeurs Style/Background ailleurs? –

+0

Essayez-vous ceci avec Aero activé sur Vista ou Windows 7? J'utilise Windows 7 avec Aero activé –