我的应用程序有一个侧边栏。该侧边栏通常是折叠的(宽度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> ...
当我右键单击列表视图项目并打开上下文菜单时,上下文菜单在后台打开。
我目前已尝试在DockPanel中订阅ContextMenuOpening和ContextMenuClosing事件,该事件是ListView的父容器
-我的可折叠网格永久固定为20的宽度,而不管鼠标悬停在哪个位置。<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触发器
如何重置网格宽度,以便将其用作鼠标悬停在触发器上?可以向上下文菜单关闭事件添加什么代码以将collapsibleGrid重置为其默认值?
是否有更整洁,更优雅的解决方案?
为了清楚起见,情况图片(没有鼠标悬停->鼠标悬停和上下文菜单)。>>
我的应用程序有一个侧边栏。该侧边栏通常是折叠的(宽度20像素),但是当我将鼠标悬停在侧边栏上时,它会展开(600像素)。这是在WPF中使用“ IsMouseOver”属性设置的...
不是将属性设置为局部值,而是在GridCollapsible.SetValue(Grid.WidthProperty, 600.0)
中调用ContextMenu_ContextMenuOpening
,然后通过在GridCollapsible.ClearValue(Grid.WidthProperty)
中调用ContextMenu_ContextMenuClosing
清除值。