c# - WPF 应用程序引发激活事件,但应用程序未显示且未获得焦点
问题描述
我有两个应用程序。其中之一是第 3 方,它将消息发送到我的 WPF 应用程序。有两种类型的消息:“隐藏”和“显示”。
在“隐藏”时,我的应用会隐藏自己
Window window = Application.Current.MainWindow;
window.WindowState = WindowState.Minimized;
window.Hide();
相应地在“show”上显示为:
Window window = Application.Current.MainWindow;
if (!window.IsVisible)
window.Show();
if (window.WindowState == WindowState.Minimized)
window.WindowState = WindowState.Normal;
window.Activate();
window.Focus();
窗口本身已订阅激活事件。并在出现时记录“显示的应用程序”。
假设在 3rd 方应用程序中,它看起来像相应的两个按钮“显示”和“隐藏”,用户可以随时按下。这两个应用程序都在同一台显示器上工作。我的 WPF 应用程序还有一个按钮“显示 3rd 方应用程序”,以防它在前面(两个应用程序都在全屏、最顶层模式下工作)
问题是有时(没有找到原因)我的应用程序在用户第一次按下“显示”后没有显示。所以他不得不按了两次。虽然日志包含
显示的应用程序
两次,每次用户按下按钮时。
我的应用也订阅了 Deactivated 事件。每次引发事件时,它都会记录“焦点丢失”。所以我预计我的日志在两个“显示的应用程序”之间也有“焦点丢失”,因为应该在用户第二次按下“显示”按钮时激活第 3 方应用程序,因为焦点在那里......但它没有发生.
任何想法为什么?
任何想法为什么第一次没有显示应用程序?
解决方案
我也有类似的问题,你需要强制它;
private void BringToFront(Window window)
{
try
{
window.Activate();
window.Topmost = true; // important
window.Topmost = false; // important
window.Focus();
SystemCommands.RestoreWindow(window);
window.Activate();
window.Topmost = true; // important
window.Topmost = false; // important
window.Focus();
}
catch (Exception)
{
}
}
推荐阅读
- intellij-idea - 在 IntelliJ 中更改文件树 + 弹出窗口的背景颜色
- marklogic - Marklogic Data Hub Framework 2.x 部署失败
- python - train_on_batch 的输出是 batch_wise 平均或全局平均
- docker - Docker 教程,localhost:4000 无法访问
- anaconda - 更新 Anaconda 和 Conda 基础和环境的正确方法是什么?
- javascript - 使用 createElement() 创建的新元素不接受全局命令
- vmware - 错误 无法获得配置文件的排他锁。另一个 VMware 进程可能正在使用配置文件运行
- css - 当我添加解析条件时,我的媒体查询不起作用,我该怎么办?
- laravel - 在托管网站中找不到的类
- tkinter - 如何从 GRID 传递到 PACK