Изменение фона управления, когда мышь входит в его область

#c# #wpf

#c# #wpf

Вопрос:

У меня есть элемент управления Label с контекстным меню, и я хочу изменить его цвет фона, когда мышь входит в его прямоугольник, и вернуть его родительский цвет фона, когда мышь покидает его.

Изменение фона реализовано внутри обработчиков событий MouseEnter и MouseLeave.

Проблема в том, что когда я нажимаю правую кнопку и появляется контекстное меню, вызывается событие MouseLeave, и фон элемента управления изменяется обратно на родительский фон, но я хочу, чтобы он оставался прежним.

Вот код:

 //Label controls are created dynamically and added to a StackPanel
ContextMenu contextMenu = new ContextMenu();
contextMenu.Items.Add("MenuItem");          

Label deviceLabel = new Label() 
{
    Content = "LabelText",
    ContextMenu = contextMenu                           
};

//when mouse enters label bounds change it's background to AliceBlue color
deviceLabel.MouseEnter  = delegate 
{
    deviceLabel.Background = new SolidColorBrush(Colors.AliceBlue); 
};

//when mouse leaves label bounds get it's parent panel control background color back
deviceLabel.MouseLeave  = delegate 
{               
    deviceLabel.Background = (Brush)this.Parent.GetValue(Panel.BackgroundProperty);
};

stackPanel.Children.Add(deviceLabel);
  

Итак, как я могу оставить фон метки с цветом AliceBlue, пока открыто контекстное меню?

Ответ №1:

Вам нужно будет проверить, работает ли ContextMenu.isOpen в событии MouseLeave, если оно есть, не меняйте фон, а вместо этого присоединитесь к новому событию в ContextMenu.Закрыто, и измените цвет фона deviceLabel при появлении этого параметра.