我正在制作一个定制菜单,带有定制的菜单项。更改控件模板和样式已经开始了,但现在我想要更改鼠标事件影响menuItems可见性的方式。
默认情况下,当您单击父菜单项的弹出窗口中的MenuItem时,弹出窗口将会折叠。当鼠标离开时,弹出窗口将保持打开状态。我想反转这一点,以便只有当鼠标离开时弹出窗口才会折叠,并且一个子菜单项可以连续单击多次。
这是可能的吗?如果是这样,我怎么能做到这一点呢?
欢迎提供给我更多洞察力或解决方案的任何信息!
谢谢
发布于 2010-05-28 00:41:31
使用menuitems上的StaysOpenOnClick属性可在单击时保持菜单打开。
当菜单失去焦点时,它会关闭,这对我来说很好。如果您想要在鼠标不再位于菜单上时自动关闭菜单,则需要在后台代码中执行此操作。下面的代码通过检查鼠标何时位于上下文菜单区域之外来为主菜单执行此操作。它只适用于没有子菜单的菜单。如果你想使用子菜单,你需要弄清楚鼠标什么时候在一个子菜单上,什么时候不在。
<Window x:Class="MenuTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<Grid Background="Red">
<Grid.ContextMenu>
<ContextMenu MouseMove="ContextMenu_MouseMove">
<MenuItem Header="Menu Item" StaysOpenOnClick="True" />
<MenuItem Header="Menu Item" StaysOpenOnClick="True" />
<MenuItem Header="SubMenu">
<MenuItem Header="Menu Item" StaysOpenOnClick="True" />
</MenuItem>
</ContextMenu>
</Grid.ContextMenu>
</Grid>
</Window>事件处理程序:
private void ContextMenu_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
ContextMenu contextMenu = sender as ContextMenu;
Point p = e.GetPosition(contextMenu);
contextMenu.IsOpen = p.X >= 0 && p.X <= contextMenu.ActualWidth && p.Y >= 0 && p.Y <= contextMenu.ActualHeight;
}https://stackoverflow.com/questions/2922658
复制相似问题