2011-10-21 3 views
1

이것은 WPF/C# 애플리케이션이며 코드 문제보다 디자인 문제가 더 많습니다.Window_Closed 이벤트를 트리거하지 않고 창 닫기

나는 창에서 파생 된 클래스를 구현하는 5 개의 분리 된 * .xaml 파일을 가지고 있습니다. 그래서, 5 개의 창문. 이는 마법사 유형의 응용 프로그램이므로 각 창에 새 창을 만들고 숨기며 새 창을 표시하는 뒤로/다음 단추가 있습니다.

이 순수하게 탐색 가끔 창을 건너 뛰거나 첫 번째 창에 다시 가고 싶어하기 때문에 등

, 새 창이 열릴 때마다 (그래서 페이지를 사용하지 않는) 기반으로하지 않습니다 부모 창은 자신을 새 창 소유자로 설정하고 숨 깁니다. 뒤로 버튼을 사용하면 새 창에 소유자가 표시되고 닫힙니다. 이것은 탐색에 잘 작동합니다.

탐색을 사용하는 것과는 달리 창을 실제로 닫을 때 문제가 있습니다. 창을 닫으면 Alt-F4를 누르고 X 등을 누르면 전체 앱을 닫아야합니다.

내 '돌아 가기'버튼은 창을 닫아서 Window_Closed를 트리거하여 전체 앱을 닫습니다.

사용자가 창을 닫을 때 전체 앱을 닫는 방법을 생각하지만 창을 닫으면 숨기고 실제로 삭제합니다. 다시 클릭하면 소유자를 표시합니다. 나는 후자를 촉발시키지 않고 후자를 할 수 없다.

제안 사항? 나는 이것에 대해 올바른 생각을하지 않고 있습니다.

답변

2

Windows간에 전환하는 대신 패널에서 UserControls를 전환하는 것이 좋습니다. 열려 있거나 닫힌 상태에 대해 걱정할 필요가 없다는 점을 제외하면 Window의 모든 기능을 사용할 수 있습니다. Next/Previous 명령을 기반으로 UserControls 가시성을 전환하십시오.

마법사의 탐색을 고려해보십시오. WPF에서 demonstrated here으로이 작업을 수행 할 수 있습니다.

탐색 기능을 사용하면 페이지를 호스팅하는 단일 창을 사용할 수 있습니다. 그런 다음 명령을 실행하여 특정 페이지로 이동하면 제어 가시성에 대해 걱정할 필요없이 페이지로 자동 전환됩니다.

+0

내비게이션을 사용해 보았는데 실제로 특정 비디오를 보았습니다. 그건 내가 원하는 것만은 아니야. 웹 페이지 탐색 기능이 더 많아 페이지간에 이동할 수 있습니다. 나는 각각의 경우에 '뒤로'와 '다음'이 무엇을해야하는지에 대한 매우 구체적인 규칙을 가지고 있습니다. 문맥에 따라 페이지를 건너 뛰거나 코드를 실행할 수도 있습니다. 5 개 창 각각에서 usercontrols를 사용하고 있습니다. 본질적으로 1 개 이상의 사용자 컨트롤이므로 지금 조사해 볼 가치가 있습니다. 뒤로/다음에 대한 논리를 창 밖으로 옮겨야 만하지만 그럴 가치가 있습니다. – Eric

+0

@ user783106 - 예, 메인 창으로 돌아가거나 옆으로 튀어 나오기를 원할 것입니다. 통제 수단. Back/Next를 클릭하면 다음 UserControl을 선택하려는 규칙을 사용할 수 있습니다. 네비게이션을 사용하고 싶지 않으면 가시성을 직접 토글하십시오. –

+0

하지만 부수적 인 점은 탐색에 규칙을 사용할 수 있다는 것입니다. NavigateTo ("문자열 이름 페이지")라는 메서드가 있습니다. 버튼을 클릭하면 코드 숨김에서 다음 페이지를 결정하는 데 필요한 논리를 실행하게됩니다. 그것을 표시 할 준비가되면 NavigateTo()를 호출하여 다음 페이지의 이름을 전달하십시오 (필요할 경우 완전히 동적 일 수 있음). –

1

우선, 나는 5 개의 다른 을 만들지 않고 하나의 창으로 만들고 마법사 페이지가 변경 될 때 그 내용을 바꿉니다. 이것은 사용자에게 더 자연스럽게 보일 것이며, 문제는 전혀 나타나지 않을 것입니다.

둘째, 여러 개의 창으로 디자인을 고집한다면 Close In 버튼 클릭 핸들러에서 가입을 취소하고 창을 다시 열면 다시 가입해야합니다.

+0

사용자의 관점에서 5 개의 다른 창이 있다는 것을 모릅니다. 위치와 크기는 동일합니다. 나는 당신의 요점을 볼 수 있습니다. 닫기 버튼의 클릭 핸들러에서 수신 거부하는 예가 있습니까? alt-f4와 같이 창을 닫을 수있는 다른 방법도 있습니다. 내가 뒤로 버튼으로 닫을 때 핸들러와 윈도우의 닫힌 이벤트를 분리하라는 제안입니까? 그건 내 생각에 맞는 말이야. – Eric

관련 문제