Visual Studio扩展阻止输入

时间:2016-11-15 10:57:38

标签: wpf visual-studio modal-dialog visual-studio-extensions vsix

在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

我错过了什么?

1 个答案:

答案 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);