请参阅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;
希望这将有助于某人。