【发布时间】:2020-06-24 08:23:02
【问题描述】:
我实现了一个简单的 WPF-Window 以加载到 Excel 的 VSTO-Addin 应用程序中。
上下文菜单闪烁,即它被显示并突然消失;这仅在窗口不是模态窗口时发生。
重现问题非常简单;首先你必须创建一个 Excel 200X VSTO 插件。
添加一个 WPF 用户控件,将根节点从 UserControl 更改为 Window。一致地修改后面的代码,即将超类从 UserControl 替换为 Window。
这是创建 WPF 窗口的技巧,因为当您使用 VSTO 外接程序时,项目项之间没有 WPF 窗口。这也是问题最有可能的罪魁祸首。
该窗口仅包含一个带有上下文菜单的标签。
xaml:
<Window x:Class="ExcelAddIn9.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"
xmlns:local="clr-namespace:ExcelAddIn9"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<StackPanel>
<Label>Some label
<Label.ContextMenu>
<ContextMenu>
<MenuItem Header="Context Menu"/>
</ContextMenu>
</Label.ContextMenu>
</Label>
</StackPanel>
</Window>
当它起作用时,输出是愚蠢的:
只是为了展示,您可以从 ThisAddIn 类中的任何位置打开窗口。
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
MyWindow w = new MyWindow();
w.Show();
}
这会闪烁。让它工作将w.Show()更改为w.ShowDialog()。同样,这不是您在实际应用程序中放置对话框的地方,因为它会阻止 excel 加载,但用于显示问题是可以的。
正如我所说,我认为这可能是他们不为 VSTO 项目提供 WPF-Window 项目的原因之一,但同样我想深入调查该问题以便获得ContextMenu 也适用于非对话框应用程序。
而且我想检查这个问题是否是 VSTO 中 WPF 窗口基本故障的症状并评估其他解决方案(可能将它们嵌入 WinForms 窗口中)。
VSTO 2010 版。
【问题讨论】: