【问题标题】:WPF application raises Activated event, but the application is not shown and not in focusWPF 应用程序引发 Activated 事件,但应用程序未显示且未获得焦点
【发布时间】:2021-10-20 10:15:59
【问题描述】:

我有两个应用程序。其中之一是第 3 方,它将消息发送到我的 WPF 应用程序。有两种类型的消息:“隐藏”和“显示”。

在“隐藏”时,我的应用会隐藏自己

Window window = Application.Current.MainWindow;
window.WindowState = WindowState.Minimized;
window.Hide();

相应地在“显示”中显示为:

Window window = Application.Current.MainWindow;
if (!window.IsVisible)
    window.Show();
if (window.WindowState == WindowState.Minimized)
    window.WindowState = WindowState.Normal;
        
window.Activate();
window.Focus();

窗口本身已经订阅了激活事件。并在出现时记录“显示的应用程序”。

假设在第 3 方应用程序中,它看起来像相应的两个按钮“显示”和“隐藏”,用户可以随时按下。这两个应用程序都在同一台显示器上工作。我的 WPF 应用程序还有一个按钮“显示 3rd 方应用程序”,以防它在前面(两个应用程序都在全屏、最顶层模式下工作)

问题是有时(没有找到原因)我的应用程序在用户第一次按“显示”后没有显示。所以他不得不按了两次。虽然日志包含

显示的应用程序

两次,每次用户按下按钮时。

我的应用也订阅了 Deactivated 事件。每次引发事件时,它都会记录“焦点丢失”。 所以我希望我的日志在两个“显示的应用程序”之间也有“焦点丢失”,因为应该在用户第二次按下“显示”按钮时激活第 3 方应用程序,因为焦点在那里......但它没有发生.

有什么想法吗?

有什么想法为什么第一次没有显示应用程序?

【问题讨论】:

    标签: c# .net wpf window focus


    【解决方案1】:

    我也遇到过类似的问题,你需要强制解决;

    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)
        {
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 2019-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多