请参阅WPF中的活动窗口?

如何在C#中使用WPF应用程序的活动窗口,在WinForms中使用ActiveForm属性?

一种可能的方法是扫描应用程序中打开的窗口列表,并检查其中哪一个具有IsActive = true

 Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive); 

不知道是否可能有多个活动窗口,例如,如果有一个模式对话框显示,在这种情况下,对话框的所有者和对话框本身可能是活动的。

有更好的方法来使用PInvoke来做到这一点。 Aviads答案不是一直在工作(有一些对话的边缘情况)。

 IntPtr active = GetActiveWindow(); ActiveWindow = Application.Current.Windows.OfType<Window>() .SingleOrDefault(window => new WindowInteropHelper(window).Handle == active); 

首先必须包括以下import:

 [DllImport("user32.dll")] static extern IntPtr GetActiveWindow(); 

我有这样的问题“Application.Current.Windows.OfType()。SingleOrDefault(x => x.IsActive);” 特别是因为我正在build立一个主窗口的应用程序,然后我有问题时,主窗口被选中。 我解决它创build这个:

在一些基类或App.xaml.cs中创build这个:

  public static Window ActivatedWindow {get;set;} 

然后把你的基类派生窗口或所有的窗口的激活事件:

第一个选项 – 个人窗口基类:

  public class MetroToolWindowBase { public MetroToolWindowBase() { Activated += new EventHandler(MakeActive); } private void MakeActive(object sender, EventArgs e) { App.ActivatedWindow= this; } } 

第二种select – 在Windows的激活事件中:

  private void XWindow_Activated(object sender,EventArgs e) { App.ActivatedWindow= this; } 

我知道这是一个老问题,但我想我的答案可以帮助某人。

我的问题是这样的:我有一个WPF MVVM应用程序,我需要在第二个视图(即第二个视图模型)中获取我的MainWindow实例,以便将标题栏button的可见性设置为visible

这是我的解决scheme:

 MainWindow window = (MyApp.MainWindow)App.Current.MainWindow; window.btnSearch.Visibility = System.Windows.Visibility.Visible; 

希望这将有助于某人。