Как я могу ссылаться на активное окно приложения WPF на С#, используя что-то вроде свойства ActiveForm в WinForms?
Обратитесь к активному окну в WPF?
Ответ 1
Одним из возможных способов было бы сканировать список открытых окон в приложении и проверить, какой из них имеет IsActive = true
:
Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive);
Не уверен, что может быть более одного активного окна, если, например, есть модальный диалог, показывающий, и в этом случае владелец диалога и само диалоговое окно могут быть активными.
Ответ 2
Существует лучший способ сделать это, используя PInvoke. Ответ Aviads не работает все время (есть некоторые случаи с диалогими).
IntPtr active = GetActiveWindow();
ActiveWindow = Application.Current.Windows.OfType<Window>()
.SingleOrDefault(window => new WindowInteropHelper(window).Handle == active);
Сначала необходимо включить следующий импорт:
[DllImport("user32.dll")]
static extern IntPtr GetActiveWindow();
Ответ 3
У меня проблемы с этим "Application.Current.Windows.OfType(). SingleOrDefault (x = > x.IsActive);" потому что я строил приложение с основным окном, тогда у меня были проблемы при выборе главного окна. Я разрешаю это, создавая это:
В каком-то базовом классе или App.xaml.cs создайте это:
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;
}
}
Второй вариант: активированное событие Windows:
private void XWindow_Activated(object sender,EventArgs e)
{
App.ActivatedWindow= this;
}
Ответ 4
Я знаю, что это немного старый вопрос, но я думаю, что мой ответ может помочь кому-то.
Моя проблема заключалась в следующем: у меня было WPF MVVM-приложение, и мне нужно было получить экземпляр MainWindow
во втором представлении, то есть во второй модели представления, чтобы установить видимость кнопки заголовка на visible
.
Это мое решение:
MainWindow window = (MyApp.MainWindow)App.Current.MainWindow;
window.btnSearch.Visibility = System.Windows.Visibility.Visible;
Надеюсь, это поможет кому-то.