Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改默认菜单(项目)鼠标反应_C#_Wpf_.net 3.5 - Fatal编程技术网

C# 更改默认菜单(项目)鼠标反应

C# 更改默认菜单(项目)鼠标反应,c#,wpf,.net-3.5,C#,Wpf,.net 3.5,我正在制作一个定制菜单,带有定制菜单项。更改控件模板和样式已经过时,但现在我想更改鼠标事件影响菜单项可见性的方式 默认情况下,单击父菜单项弹出窗口中的菜单项时,弹出窗口将折叠。当鼠标离开时,弹出窗口保持打开状态。我想扭转这种情况,这样弹出窗口只会在鼠标离开时崩溃,并且可以按顺序多次单击子菜单项 这可能吗?如果是这样,我怎么能做到这一点呢 欢迎提供给我更多见解或解决方案的任何信息 谢谢在菜单项上使用StaysOpenOnClick属性,使菜单在单击时保持打开状态 一个菜单会关闭,当它失去重点,这是

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

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

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

欢迎提供给我更多见解或解决方案的任何信息


谢谢

在菜单项上使用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;
}
private void ContextMenu\u MouseMove(对象发送器,System.Windows.Input.MouseEventArgs e)
{
ContextMenu ContextMenu=发送者作为ContextMenu;
点p=e.GetPosition(上下文菜单);

contextMenu.IsOpen=p.X>=0&&p.X=0&&p.Y谢谢!我不敢相信我在msdn上读到了这个属性,你的信息正是我想要的,非常感谢。