【问题标题】:Alterning default Menu(Item) mouse reactions更改默认菜单(项目)鼠标反应
【发布时间】:2010-05-27 15:51:58
【问题描述】:

我正在制作带有自定义菜单项的自定义菜单。更改控件模板和样式已经可以了,但现在我想更改鼠标事件影响 menuItems 可见性的方式。

默认情况下,当您单击父菜单项的弹出窗口中的 MenuItem 时,弹出窗口将折叠。当鼠标离开时,弹出窗口保持打开状态。我想反转这个,这样弹出窗口只会在鼠标离开时折叠,并且子菜单项可以按顺序多次单击。

这可能吗?如果是这样,我怎么能做到这一点?

欢迎任何信息为我提供更深入的了解或导致解决方案!

谢谢

【问题讨论】:

    标签: c# wpf .net-3.5


    【解决方案1】:

    在 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;
    }
    

    【讨论】:

    • 谢谢!我不敢相信我在 msdn 上阅读了该属性,您的信息正是我想要的,非常感谢。
    猜你喜欢
    • 2022-06-22
    • 2020-03-07
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多