2010-12-12 2 views
1

Ich habe den folgenden Code, um dynamisch zu erstellen und eine Schaltfläche zu einem Panel hinzufügen:dynamisch ändern Schaltfläche Hintergrund in WPF erstellt

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

Das Problem ist, dass wenn ich den Mauszeiger über die Schaltfläche bewegen, kehrt es zu sein vorheriger hellblauer Hintergrund. Nun, ich habe gelesen, dass ich einen mouseover-Button-Trigger benötige, aber ich habe keine Ahnung, wie ich das programmatisch nur für diesen Button machen soll, alleine. Grundsätzlich möchte ich, dass der Hintergrund sich auf bgMouseOverBrush ändert, wenn der Mauszeiger darüber ist, und zurück zu bgBrush, wenn dies nicht der Fall ist.

Antwort

2

starten:

// 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; 
    } 

Hoffnung, das hilft.

EDIT

Maus eingeben MouseOver

Maus Out Mouse Out

+0

Nein, das funktioniert nicht. Offensichtlich überschreibt die Schaltfläche den im MouseEnter-Ereignishandler festgelegten Hintergrund, direkt nachdem er mit dem Auslöser der IsMouseOver-Abhängigkeitseigenschaft geändert wurde, der den Hintergrund auf den Standard-Chrome setzt. Ein Style-Trigger oder etwas ähnliches wird hier benötigt. –

+0

Hallo Michael, ich habe tatsächlich mit den gleichen Gradientenwerten getestet und festgestellt, dass es gut funktioniert (Screen Captures an die Antwort angehängt). Sind Sie sicher, dass Sie die Style/Background-Werte nicht woanders zurücksetzen? –

+0

Versuchen Sie dies mit Aero aktiviert unter Vista oder Windows 7? Ich verwende Windows 7 mit Aero aktiviert –