1

在 WPF 中创建菜单时出现问题。发生的情况是,当您停止按下鼠标按钮时,它会自动关闭。我希望它表现得像常规菜单一样,您可以在其中单击并且子项将保持不变,但无论如何我都找不到完成此操作。

代码如下所示:

<Window x:Class="ExcelAddIn.MyWindow"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
        <Grid>
            <DockPanel>
                <Menu Width="Auto" IsMainMenu="True" >
                    <MenuItem Header="Item">
                        <MenuItem Header="SubItem" />
                    </MenuItem>
                </Menu>
            </DockPanel>
        </Grid>
</Window>

我想知道这是否与逻辑焦点有关?我看到它可能是 .NET 框架中的一个错误?有任何想法吗?

提前致谢

起初我不认为它有任何区别,但显然它确实有。在独立的 WPF 应用程序中运行代码时,它可以工作,但是当我尝试从 Excel 插件项目打开 WPF 窗口时,我遇到了这个问题。

4

2 回答 2

1

行!我解决了这个问题。事实证明,这毕竟是一个焦点问题。当 excel 插件执行 WPF 窗口时,excel 窗口仍然是焦点。因此,在每次 mouseup 时,焦点都会从 WPF 跳回到 Excel。

我所要做的就是改变执行:

MainWindow mainWindow = new MainWindow();
mainWindow.Activate();
mainWindow.Show();

对此:

MainWindow mainWindow = new MainWindow();
mainWindow.Activate();
mainWindow.ShowDialog();

无论如何,谢谢你们的帮助!

于 2011-07-22T09:42:03.197 回答
0

我稍微调整了您的代码(DockPanel.Dock="Top"以及一个额外的网格来填充停靠面板的其余部分)。它工作正常,菜单保持打开状态。对你起作用吗?:

<Window x:Class="WpfApplication2.Window3"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window3" Height="300" Width="300">
    <Grid>
        <DockPanel>
            <Menu Width="Auto"
                  IsMainMenu="True" DockPanel.Dock="Top">
                <MenuItem Header="Item">
                    <MenuItem Header="SubItem" />
                </MenuItem>
            </Menu>
            <Grid />
        </DockPanel>
    </Grid>
</Window>
于 2011-07-20T07:59:54.247 回答