У меня есть следующий код, чтобы динамически создавать и добавлять кнопки на панели:Изменение динамически создается фон кнопки в 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
, когда это не так.
Нет, это не работает. По-видимому, кнопка переопределяет фоновый набор в обработчике событий MouseEnter сразу после его изменения с помощью триггера свойства зависимостей IsMouseOver, который устанавливает фон по умолчанию хром. Здесь нужен триггер стиля или что-то в этом роде. –
Привет, Майкл, я на самом деле тестировался с одинаковыми значениями градиента и обнаружил, что он отлично работает (Screen Captures привязаны к ответу). Вы уверены, что не сбросили значения стиля/фона где-то еще? – 2010-12-12 20:18:10
Вы пытаетесь использовать Aero в Vista или Windows 7? Я использую Windows 7 с включенным Aero –