2010-12-12 2 views
1

У меня есть следующий код, чтобы динамически создавать и добавлять кнопки на панели:Изменение динамически создается фон кнопки в 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); 

Проблема в том, что при перемещении курсора мыши на кнопку, он возвращается к его предыдущий светло-голубой фон. Теперь я прочитал, что мне нужен триггер кнопки мыши, но я понятия не имею, как это сделать программно только для этой кнопки, в одиночку. В принципе, я хочу, чтобы его фон изменился на bgMouseOverBrush, когда курсор мыши над ним и обратно до bgBrush, когда это не так.

ответ

2

Попробуйте это:

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

Надежда, что помогает.

EDIT

Mouse Enter MouseOver

Mouse Out Mouse Out

+0

Нет, это не работает. По-видимому, кнопка переопределяет фоновый набор в обработчике событий MouseEnter сразу после его изменения с помощью триггера свойства зависимостей IsMouseOver, который устанавливает фон по умолчанию хром. Здесь нужен триггер стиля или что-то в этом роде. –

+0

Привет, Майкл, я на самом деле тестировался с одинаковыми значениями градиента и обнаружил, что он отлично работает (Screen Captures привязаны к ответу). Вы уверены, что не сбросили значения стиля/фона где-то еще? – 2010-12-12 20:18:10

+0

Вы пытаетесь использовать Aero в Vista или Windows 7? Я использую Windows 7 с включенным Aero –