Мое приложение имеет боковую панель. Эта боковая панель обычно сворачивается (ширина 20 пикселей), но когда я наводю курсор мыши на боковую панель, она расширяется (600 пикселей). Это устанавливается в WPF с помощью свойства «IsMouseOver» в сетке
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Left" Margin="5 30" Name="GridCollapsible">
<Grid.Style>
<Style TargetType="{x:Type Grid}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Width" Value="600"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="Width" Value="20"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
...
Одним из элементов, который является дочерним элементом этой сетки, является ListView. Это ListView имеет ContextMenu
<ListView Name="TodayCalendarListBox" Margin="0 10 0 0" FontSize="16" HorizontalContentAlignment="Stretch" DockPanel.Dock="Top">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Completed" Click="CompletedMenuItem_Click"/>
<MenuItem Header="Missed" Click="MissedMenuItem_Click"/>
</ContextMenu>
</ListView.ContextMenu>
...
Когда я щелкаю правой кнопкой мыши элемент представления списка и открываю контекстное меню, контекстное меню открывается в фоновом режиме.
У меня есть в настоящее время пытались подписаться на события ContextMenuOpening и ContextMenuClosing в DockPanel, который является родительским контейнером для ListView
<DockPanel Margin="8" ContextMenuOpening="ContextMenu_ContextMenuOpening" ContextMenuClosing="ContextMenu_ContextMenuClosing">
private void ContextMenu_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
GridCollapsible.Width = 600;
}
private void ContextMenu_ContextMenuClosing(object sender, ContextMenuEventArgs e)
{
GridCollapsible.Width = 20;
}
Эти события запускаются, как и ожидалось, и ручное исправление ширины в коде после 600 делает контекстное меню появилось в верхней части моей разборной сетки, как и ожидалось. Однако я не могу повторно активировать триггер MouseOver - моя разборная сетка постоянно зависает на ширине 20, независимо от наведения мыши.
Как можно сбросить ширину сетки, чтобы она действует как наведение мыши на триггер? Какой код можно добавить к событию закрытия контекстного меню, чтобы сбросить коллапсигрид к его значению по умолчанию?
Есть ли более аккуратное и элегантное решение для этого?
Изображение ситуации (без наведения мыши -> для наведения мыши и контекстного меню) для наглядности.