首页 新闻 会员 周边 捐助

[WPF]模态窗口如何知道本程序中其他窗口被尝试激活

0
[待解决问题]
  1. 已有主窗口,再使用showdialog显示一个模态窗口。
  2. 如果此时再点击主窗口,主窗口因为模态窗口阻止不会正常响应。但系统会有提示音。

现在客户的机器上很多没有音箱,导致没有提示效果。想在主窗口因为模态窗口阻止不会正常响应时,使模态窗口抖动来增强提示效果。请问该如果实现?(窗口抖动的动画我会写,关键是弹出窗口如何得到这个消息)

没有园豆,如能解决,不胜感激。可提供小额筹谢。

madgecko的主页 madgecko | 初学一级 | 园豆:6
提问于:2020-01-14 14:49
< >
分享
所有回答(2)
0

有人问过这个问题:https://stackoverflow.com/questions/52390926/wpf-showdialog-click-owner-window-event
没有答案,但是有一个建议。


或者你换个思路,做成非模态窗体,用非模态窗体模拟模态窗体。我觉得这样可能会简单些。要不你就和客户商量下,放弃此奇葩需求吧。

会长 | 园豆:12463 (专家六级) | 2020-01-14 16:49
0

你把模态换成TopMost是不是就好多了?

猝不及防 | 园豆:2878 (老鸟四级) | 2020-01-14 17:24

有的时候主窗体的其他操作确实需要被阻止啊

支持(0) 反对(0) madgecko | 园豆:6 (初学一级) | 2020-01-14 17:39

@madgecko: 想做的话还是能做,有副窗口的话主窗口事件一律不能触发,最简单的,
if(window.isexisted)return;或者消息阻断啥的...
但是得不偿失.简单的小功能需要复杂的逻辑去铺垫.

支持(0) 反对(0) 猝不及防 | 园豆:2878 (老鸟四级) | 2020-01-14 18:09

参考一下源码:
https://github.com/dotnet/wpf/blob/ac9d1b7a6b0ee7c44fd2875a1174b820b3940619/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Window.cs

其实Showdialog内部也是调用了Show,
只不过置了一个变量_showingAsDialog=true
而当在show的时候会判断
else if (_showingAsDialog == true)
{
throw new InvalidOperationException(SR.Get(SRID.ShowDialogOnModal));
}
所以show不出来,或许你可以从有声音响这部分源码看一下有没有启发

支持(0) 反对(0) 猝不及防 | 园豆:2878 (老鸟四级) | 2020-01-14 18:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册