在VSIX项目中使用以下tutorial,我创建了一个继承自Microsoft.VisualStudio.PlatformUI.DialogWindow的WPF窗口,并使用以下代码以模态方式显示:
var myWindow = new MyWindow(myParameters);
myWindow.ShowDialog();
当我在RELEASE模式下编译它并在没有调试[Ctrl + F5]的情况下启动时,它会打开Visual Studio的实验版本。在这里,我打开另一个解决方案,然后执行我的模态窗口。窗口工作正常 - 我可以输入文本框等等。
然而,当我关闭模态对话框窗口[使用this.Close()]时,问题就开始了。如果我导航到打开的解决方案中的一个文档,我可以键入,但键盘按钮退格[< - ]和[删除](也可能是其他人)只是被忽略....我不能删除什么我刚输入了!
此外,当我尝试关闭Visual Studio的这个实验版本时,我收到以下消息:
Microsoft Visual Studio检测到某个操作正在阻止 用户输入。这可能是由活动模式对话框或任务引起的 需要阻止用户交互。你想关闭吗? 呢?
但是,据我所知,我的模态窗口已关闭,甚至可能在我关闭此Visual Studio实例时被垃圾收集。
这不仅限于实验版本 - 当我将此VSIX推送到我们的本地库并安装为扩展时,我会得到相同的行为。
我也尝试过明确设置所有者,但他对此问题没有任何影响:
var myWindow = new MyWindow(myParameters)
{
Owner = Application.Curent.MainWindow
}
myWindow.ShowDialog();
如果我将其设为非模态窗口,那么我会遇到不同(但相关)的问题。在这里,如果我打开Visual Studio的实验版本并打开另一个解决方案,我将导航到C#页面。然后我打开我的Extension的WPF窗口,在那里我可以愉快地在WPF窗口中键入TextBoxes。但是,每当我单击退格[< - ]或[delete]键时,这不会影响当前的WPF文本框,而是影响当前解决方案中先前打开的C#代码窗口。见a previous post on this
我错过了什么?
答案 0 :(得分:2)
以下建议here似乎对我有用:
IVsUIShell uiShell = (IVsUIShell)ServiceProvider.GetService(typeof(SVsUIShell));
uiShell.EnableModeless(0);
var myWindow = new MyWindow(myParameters)
{
Owner = Application.Curent.MainWindow
}
myWindow.ShowDialog();
uiShell.EnableModeless(1);