WPF 창이 닫혔는지 어떻게 알 수 있습니까?
저는 사용자가 닫거나 자동으로 닫히는 일부 하위 창을 표시하는 응용 프로그램을 만들고 있습니다.몇 가지 예외를 디버깅하는 동안 다음과 같은 메서드를 호출하려고 했습니다.Hide()
이미 닫힌 창에서 이 특정 코드 분기는 두 경우 모두에 공통적이었고 나는 이것을 알아차리지 못했습니다.
제 첫 번째 아이디어 중 하나는 부동산을 찾는 것이었습니다.Window
창문이 닫혔다는 것을 의미합니다찾을 수 없을 것 같습니다.WinForms에서는 IsDisposed 속성에서 양식이 닫혔음을 나타내는 다소 신뢰할 수 있는 표시기를 찾습니다(대화 상자에서는 안정적으로 작동하지 않지만 대화 상자에서는 작동하지 않습니다).이와 동등한 것은 아무것도 보이지 않습니다.Window
다음에 대한 설명서Window.Close()
메소드에 의해 변경된 속성을 나타내지 않는 것 같습니다.내가 명백한 것을 놓쳤나요, 아니면 창이 닫혔는지 알 수 있는 유일한 방법인가요?Closed
이벤트? 간단한 작업에 대한 까다로운 요구사항인 것 같습니다.
MSDN WPF 포럼의 이 대화(마지막 게시물 참조)에 따르면 IsLoaded가 false인지 확인할 수 있습니다. 이는 창에서 콘텐츠를 "다운로드할 자격이" 있음을 의미합니다.그것이 당신에게 효과가 있기를 바랍니다!
Window 클래스에서 파생된 경우 다음 작업을 수행할 수 있습니다.
public bool IsClosed { get; private set; }
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
IsClosed = true;
}
비공개 이벤트에 등록하는 것보다 이점이 있습니다. 콜백 등록을 취소할 필요가 없습니다.
이것이 당신에게 유용하기를 바랍니다.
발표소스.FromVisual(창) == null;
제 해결책은 대화 상자에 이벤트를 간단히 첨부하는 것이었습니다.Closed
이벤트:
MikesDialog dlg = new MikesDialog();
dlg.Closed += delegate
{
// The user has closed our dialog.
validationgDlg = null;
};
// ...elsewhere in the code...
if (validationgDlg != null)
{
// Our "MikesDialog" is still open...
. . .
}
또 다른 방법은 애플리케이션입니다.Windows에는 열려 있는 창 목록이 있습니다.이 컬렉션에 창이 포함되어 있는지 확인할 수 있습니다(닫힌 후 제거됨).
당신이 전화해야 할 것 같습니다.OfType<Window>()
왜냐하면 그것은 전문적인 컬렉션이기 때문입니다.
IsDisposed 속성이 내부 속성인 이유는 모르겠지만, 반사를 두려워하지 않는다면:
var window = new Window();
var propertyInfo = typeof(Window).GetProperty("IsDisposed", BindingFlags.NonPublic | BindingFlags.Instance);
var isDisposed = (bool)propertyInfo.GetValue(window);
즉, 반영은 더 이상 클래스의 공용 API에 의해 보호되지 않기 때문에 과도하게 사용되지 않습니다.해당 경로를 사용할 경우 최소 단위 테스트를 사용해야 합니다.
WindowClass에 정적이 아닌 속성을 추가할 수 있습니다.bool IsClosed
리고진정합다니에 합니다.Closed
이벤트:
public partial class MyWindow : Window
{
public bool IsClosed { get; set; } = false;
public MyWindow()
{
Closed += MyWindow_Closed;
InitializeComponent();
}
}
private void MyWindow_Closed(object sender, EventArgs e)
{
IsClosed = true;
}
에 따라 경에따확인라를 합니다.Application.Current.MainWindow.IsActive
합니다.
언급URL : https://stackoverflow.com/questions/381973/how-do-you-tell-if-a-wpf-window-is-closed
'programing' 카테고리의 다른 글
디버그 모드에서 새 Firebase Crashlytics 사용 안 함 (0) | 2023.06.06 |
---|---|
Float 및 google_sign_in 플러그인:플랫폼예외(sign_in_failed, com.google.android.gms.common.api).ApiException: 10: , null) (0) | 2023.06.06 |
한 줄의 코드로 파일 읽기 및 닫기 (0) | 2023.06.06 |
dplyr을 사용하여 각 그룹에서 최대값이 있는 행을 선택하는 방법은 무엇입니까? (0) | 2023.06.06 |
numpy dot()와 Python 3.5+ 행렬 곱셈의 차이 @ (0) | 2023.06.06 |