WPF의 활성 창을 참조하십시오.
WinForms의 ActiveForm 속성과 같은 것을 사용하여 C #에서 WPF 응용 프로그램의 활성 창을 어떻게 참조 할 수 있습니까?
한 가지 가능한 방법은 응용 프로그램에서 열려있는 창 목록을 스캔하고 그중 하나에 다음이 있는지 확인하는 것입니다 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);
먼저 다음 가져 오기를 포함해야합니다.
[DllImport("user32.dll")]
static extern IntPtr GetActiveWindow();
나는 이것이 약간 오래된 질문이라는 것을 알고 있지만 내 대답이 누군가를 도울 수 있다고 생각합니다.
내 문제는 다음과 같습니다. WPF MVVM 응용 프로그램이 있었고 MainWindow
제목 표시 줄 단추의 가시성을 설정하려면 두 번째 뷰, 즉 두 번째 뷰 모델에서 인스턴스 를 가져와야 했습니다 visible
.
이것이 내 해결책입니다.
MainWindow window = (MyApp.MainWindow)App.Current.MainWindow;
window.btnSearch.Visibility = System.Windows.Visibility.Visible;
이것이 누군가를 도울 수 있기를 바랍니다.
이 방법으로 문제가 있습니다 "Application.Current.Windows.OfType (). SingleOrDefault (x => x.IsActive);" 특히 메인 윈도우로 애플리케이션을 만들었 기 때문에 메인 윈도우를 선택할 때 문제가 발생했습니다. 나는 이것을 만드는 것을 해결합니다.
일부 기본 클래스 또는 App.xaml.cs에서 다음을 만듭니다.
public static Window ActivatedWindow {get;set;}
그런 다음 Window 또는 Window의 모든 Activate 이벤트를 파생하는 기본 클래스에 넣습니다.
첫 번째 옵션-개인 창 기본 클래스 :
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;
}
참조 URL : https://stackoverflow.com/questions/2038879/refer-to-active-window-in-wpf
'programing' 카테고리의 다른 글
jQuery UI 슬라이더 이벤트 트리거 (0) | 2021.01.18 |
---|---|
TSQL에서 증가하는 날짜의 결과 집합 생성 (0) | 2021.01.18 |
VBScript에서 문자열에 따옴표 추가 (0) | 2021.01.18 |
node.js-코드 보호? (0) | 2021.01.18 |
중앙에서 x 픽셀만큼 오프셋 된 HTML 배경 이미지 (0) | 2021.01.18 |