#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 при появлении этого параметра.