0
我在WPF中有一个contextmenu和多个子菜单。默认行为是,如果您将鼠标悬停在项目下方的菜单项上,它将打开子菜单。不过,我想改变它,所以它不会在悬停时打开,但只需左键单击即可。wpf contextmenu点击打开子菜单
我做了一个MenuItem的默认模板的副本。在这里,我做了一些改变:
<ControlTemplate x:Key="{ComponentResourceKey ResourceId=SubmenuHeaderTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}" TargetType="{x:Type MenuItem}">
<!-- some default template code -->
<ControlTemplate.Triggers>
<Trigger Property="IsSuspendingPopupAnimation" Value="true">
<Setter Property="PopupAnimation" TargetName="PART_Popup" Value="None"/>
</Trigger>
<Trigger Property="Icon" Value="{x:Null}">
<Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Visibility" TargetName="GlyphPanel" Value="Visible"/>
<Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
</Trigger>
<Trigger Property="IsHighlighted" Value="True">
<Setter Property="Background" TargetName="templateRoot" Value="Transparent"/>
<Setter Property="BorderBrush" TargetName="templateRoot" Value="{StaticResource MenuItem.Highlight.Border}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="TextElement.Foreground" TargetName="templateRoot" Value="{StaticResource Menu.Disabled.Foreground}"/>
<Setter Property="Fill" TargetName="Glyph" Value="{StaticResource Menu.Disabled.Foreground}"/>
<Setter Property="Fill" TargetName="RightArrow" Value="{StaticResource Menu.Disabled.Foreground}"/>
</Trigger>
<Trigger Property="ScrollViewer.CanContentScroll" SourceName="SubMenuScrollViewer" Value="false">
<Setter Property="Canvas.Top" TargetName="OpaqueRect" Value="{Binding VerticalOffset, ElementName=SubMenuScrollViewer}"/>
<Setter Property="Canvas.Left" TargetName="OpaqueRect" Value="{Binding HorizontalOffset, ElementName=SubMenuScrollViewer}"/>
</Trigger>
<!-- my code to supress the opening of the submenu in mouseover -->
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="IsOpen" TargetName="PART_Popup" Value="False"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
这似乎起初工作。但是,当我慢慢地将鼠标移动到另一个菜单项时,它会显示一会儿 - 可能是'IsMouseOver'不是真的一些空间,但子菜单仍然显示。
我怎样才能完全抑制它 - 除非有人点击menuItem?
愚蠢的问题 - 为什么你要改变默认行为?菜单被广泛理解为...通过让您的应用程序行为不同,用户必须学习新的东西。 – RQDQ