一个解决方案:XAML
<MenuItem x:Name="MyMenu" MouseEnter="MenuItem_MouseEnter" MouseLeave="MenuItem_MouseLeave" Header="toto" >
<MenuItem Header="titi"/>
</MenuItem>
Run Code Online (Sandbox Code Playgroud)
代码背后:
private void MenuItem_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
this.MyMenu.IsSubmenuOpen = true;
}
private void MenuItem_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
this.MyMenu.IsSubmenuOpen = false;
}
Run Code Online (Sandbox Code Playgroud)
使用XAML(感谢HB提供建议,第一次编辑):
<MenuItem.Style>
<Style TargetType="MenuItem">
<Style.Triggers>
<Trigger Property="IsHighlighted" Value="True">
<Setter Property="IsSubmenuOpen" Value="True"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="IsSubmenuOpen" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
Run Code Online (Sandbox Code Playgroud)
不能使用IsHighlighted false,因为当鼠标悬停在它上面时它仍然会突出显示.第2次编辑:当菜单打开时,显示showdialog窗口时出现错误.所以我们需要结合MouseEnter事件来防止这个bug.(错误是弹出窗口显示后子菜单不再打开)