Visual Studio 扩展中的 WPF 模式窗口阻止输入

2023-12-04

使用以下内容tutorial在 VSIX 项目中,我创建了一个继承自 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# 页面。然后,我打开扩展程序的 WPF 窗口,我可以在该 WPF 窗口中的文本框中愉快地键入内容。但是,每当我单击退格键 [之前的一篇文章对此

我缺少什么?


发现以下建议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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 扩展中的 WPF 模式窗口阻止输入 的相关文章

随机推荐

  • 并行化 Numpy 向量运算

    让我们使用 例如 numpy sin 以下代码将返回数组中每个值的正弦值a import numpy a numpy arange 1000000 result numpy sin a 但我的机器有 32 个核心 所以我想利用它们 对于类似
  • 在鼠标下滚动窗口

    如果您查看一下 Visual Studio 2012 您会注意到 如果您使用鼠标滚轮 则鼠标下方的窗口将滚动 而不是焦点窗口 也就是说 如果将光标放在代码编辑器中 并将鼠标移到解决方案资源管理器窗口上并滚动 则解决方案资源管理器将滚动 而不
  • 为什么 python 中会缓存字符串对象

    这是示例 gt gt gt first string str This is some how cached gt gt gt second string str This is some how cached gt gt gt id fi
  • 在 Windows/Linux 上使用 python3 脚本检查可执行文件是 32 位还是 64 位

    我正在用 Python3 编写软件 更具体地说 Python 3 8 1 在某些时候 软件需要检查某个任意可执行文件是 64 位还是 32 位 经过一番研究 我发现了以下帖子 检查 exe 是 32 位还是 64 位 在这篇文章中 提供了以
  • 将 CPanel 中的所有 Google JDBC 服务 IP 地址列入白名单

    我正在尝试通过 JDBC 服务将 Google Docs 扩展连接到 MySQL 数据库 MySQL 数据库运行在需要使用 CPanel 的共享服务器上 CPanel 一次只能添加一个白名单规则 并且只能使用 通配符 与 0 个或多个任何类
  • EditorTemplate 中的 DropDownListFor 未选择值

    我有一个自定义对象的编辑器模板 在该编辑器模板中 我使用了几个 DropDownListFor 帮助程序 在每个模型中 我指定一个唯一的模型属性 带有预先选择的值 和包含所有选择选项的选择列表 Example 我知道正在填充选项值 从查看源
  • 如何防止jsoup转换特殊字符? [复制]

    这个问题在这里已经有答案了 请看下面的简化示例 public static void main String args String html n n n div n p 2 lt X p n div n n
  • Symfony2/Doctrine 2 - 转义密码中的特殊字符

    如何通过 Doctrine 转义用于数据库连接的密码 我的密码中有一个 Symfony2 会给我这个错误 SQLSTATE 28000 1045 Access denied for user user server using passwo
  • R 中向量的最大长度

    根据 R Memory limits 文档 不可能分配长度超过 2 31 1 的向量 这是因为用作索引的整数只能使用 31 位 符号位为 1 位 但在 64 位系统上 我应该能够分配更长的向量 为什么 R 在 64 位系统上施加相同的最大长
  • 如何在Java中将毫秒转换为“X分钟,x秒”?

    我想用记录时间System currentTimeMillis 当用户在我的程序中开始某些操作时 当他完成时 我将减去当前的System currentTimeMillis 来自start变量 我想使用人类可读的格式向他们显示经过的时间 例
  • AngularJS 发出模拟 httpGET 请求的问题

    所以我对 angularjs 及其模拟库很陌生 我正在尝试测试是否发出了特定的 GET 请求 但我总是在第二个断言中收到此错误 并且无法弄清楚原因 Error Unsatisfied requests GET 1 json 我下面的代码有什
  • 如何根据名称检测成员变量是否存在及其类型?

    我知道如何编写一个类 该类可以在编译时检测给定的类 T 是否具有具有给定名称和给定类型 Type 的成员 例如 include
  • 使用 MatMenuTrigger 上的 ViewChild 以编程方式打开 Angular 材质菜单

    如何使用按钮触发器上的模板引用变量以编程方式打开 Angular Material 菜单 使用 ViewChild 在组件中访问该变量 单击时菜单通常会打开 但我想在鼠标悬停时以编程方式打开它 鼠标悬停 事件处理程序给出错误 无法读取未定义
  • C# - 从任何字符串中查找 unicode 代码点的代理对的正则表达式?

    我正在尝试解析其中可能包含表情符号的消息 可以接收的示例消息如下所示 type chat msg UserName u00a0 ud83d ude0b n 应该匹配的是 u00a0 作为单个字符 ud83d ude0b 作为一对 我有正则表
  • 即使客户端断开连接,Grpc Server 也会继续处理数据

    我有一个服务器 它为给定的请求传输数据 下面是执行该功能的方法 Override public void getChangeFeed ChangeFeedRequest request StreamObserver
  • 符合 MSSCCI 的 Mercurial 客户端

    您好 我正在寻找兼容 Microsoft 源代码控制接口 MSSCCI 的 Mercurial 客户端 以便将 Mercurial 集成到我的 IDE 中 LabVIEW 我想HgSCC已经很接近了 因为它声称它使用 MSSCC 接口与 V
  • 保护 LocalDB 免受用户访问

    我正在考虑使用 SQL LocalDB 作为客户端数据库 它将取代 net 4 中开发的内部应用程序中当前的 SQL CE 3 5 数据库 我遇到了一个问题 我不确定如何解决 这与 LocalDB 实例的安全设置有关 如果我在 net 内设
  • 如何在 iOS 中将触摸事件发送到超级视图?

    我正在做一个 iPad 应用程序 如何将触摸事件发送到其超级视图 我正在添加一个始终是其他活动的视图 在此基础上 我将滚动视图添加到屏幕的一半 并在另一半屏幕中添加另一个视图 一切正常 现在我想添加一个按钮和一个小的描述视图 当点击按钮时
  • asp.net mvc 3 上时间跨度的客户端验证

    我需要接收一些格式为 hh mm 的时间信息 没有秒 该属性定义如下 DataType DataType Time DisplayFormat ApplyFormatInEditMode true DataFormatString 0 hh
  • Visual Studio 扩展中的 WPF 模式窗口阻止输入

    使用以下内容tutorial在 VSIX 项目中 我创建了一个继承自 Microsoft VisualStudio PlatformUI DialogWindow 的 WPF 窗口 并使用以下代码以模态方式显示此窗口 var myWindo