WPF에 다중 하위 메뉴가있는 컨텍스트 메뉴가 있습니다. 기본 동작은 항목 아래에있는 메뉴 항목 위로 마우스를 이동하면 하위 메뉴가 열리는 것입니다. 그러나, 나는 그것이 호버에 열리지 않을 것이기 때문에 그것을 바꾸고 싶다. 그러나 왼쪽 클릭에 관해.wpf 컨텍스트 메뉴 클릭시 하위 메뉴 열기
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>
이것은 처음에는 작동하는 것으로 보입니다. 그러나, 천천히 다른 menuItem 마우스를 이동할 때 잠시 나타납니다 - 'IsMouseOver'사실이 아닌 일부 공간 가능성이 있지만 여전히 하위 메뉴를 보여줍니다.
누군가가 menuItem을 클릭하지 않는 한 어떻게 완전히 억제 할 수 있습니까?
멍청한 질문 - 왜 기본 동작을 변경하고 있습니까? 메뉴는 꽤 널리 이해되고 있습니다. 앱이 다르게 동작하도록함으로써 사용자는 새로운 것을 배워야합니다. – RQDQ