|
출처: 선문비트프로젝트 원문보기 글쓴이: 21기 유미영
WPF – 창 학습 |
조: 2조 |
작성일: 2011-05-11 | |
작성자: 유미영 |
WPF 창 개요 |
사용자는 창을 통해 WPF(Windows Presentation Foundation) 독립 실행형 응용 프로그램과 상호 작용한다. r 창의 기본 용도 데이터를 시각화하는 콘텐츠를 호스팅 사용자가 데이터와 상호 작용할 수 있도록 함 독립 실행형 WPF 응용 프로그램에서는 Window 클래스를 사용하여 자체 창을 제공한다. |
Window 클래스 창 구현 MSBuild에 eogko 창 정의 구성 창 수명 창 위치 창 크기 크기 조정 속성에 대해 우선 순위 순서 창 상태 보안 고려 사항 기타 유형의 창 관련 항목 |
Window클래스 |
창은 비클라이언트 영역과 클라이언트 영역의 두 영역으로 나뉜다. 창의 비클라이언트 영역은 WPF에 의해 구현되며 다음을 비록하여 대부분의 창에 공통적인 부분이 포함된다.
비클라이언트 영역 테두리 제목 표시줄 아이콘 최소화, 최대화 및 복원 단추 닫기 단추 사용자가 창을 최소화, 최대화, 복원, 이동, 크기 조정 및 닫을 수 있는 메뉴 항목이 들어 있는 시스템 메뉴
창의 클라이언트 영역은 창의 비클라이언트 영역 내에 포함된 영역이며, 개발자는 이 영역을 사용하여 메뉴 모음, 도구 모음 및 컨트롤 등의 응용 프로그램 특정 콘텐츠를 추가한다.
WPF에서 창은 다음을 수행하기 위해 사용하는 Window 클래스에 의해 캡슐화 된다. 창을 표시 창의 크기, 위치 및 모양을 구성 응용 프로그램 별 콘텐츠를 호스팅 창의 수명을 관리 |
비클라이언트 영역을 변형하여 Window를 사용자 지정한 예제
이와 같이 비클라이언트 영역의 테두리를 변형시키는 방법은 간단하다. Window Style을 없애고, Border로 테두리를 그려주는데, ConerRadius로 테두리부분의 둥근 정도를 조절할 수 있다. |
창 구현 |
일반적인 창의 구현은 모양과 동작으로 구성된다. 모양은 창이 사용자에게 표시되는 형태를 정의하고 동작은 사용자가 상호 작용할 때 창이 기능하는 방식을 정의한다. WPF에서 코드나 XAML 태그를 사용하여 창의 모양과 동작을 구현할 수 있다. 하지만 창의 모양은 대개 XAML 태그를 사용하여 구현하며, 그 동작은 코드 숨김을 사용하여 구현한다. |
예제 ------------------------------------------------------------------------------------------- XAML (숨겨있는 코드) -------------------------------------------------------------------------------------------
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="SDKSample.MarkupAndCodeBehindWindow">
<!-- Client area (for content) -->
</Window> ------------------------------------------------------------------------------------------- Window -------------------------------------------------------------------------------------------
using System.Windows; // Window
namespace SDKSample { public partial class MarkupAndCodeBehindWindow : Window { public MarkupAndCodeBehindWindow() { InitializeComponent(); } } } -------------------------------------------------------------------------------------------
|
MSBuild에 대해 창 정의 구성 | |
창을 구현하는 방법에 따라 창을 MSBuild에 대해 구성하는 방법이 달라진다. XAML 태그와 코드 숨김을 모두 사용하여 정의되는 창의 경우 - XAML 태그 파일은 MSBuild Page 항목으로 구성됨 - 코드 숨김 파일은 MSBuild Compile 항목으로 구성됨
| |
창 수명 | |
다른 클래스와 마찬가지로 창에는 창이 열린 후 처음 인스턴스화될 때 시작하여, 열린 후 활성화 및 비활성화되고 최종적으로 닫힐 때까지의 기간인 수명이 있다. |
창 열기 창을 열려면 먼저, 아래와 같은 창의 인스턴스를 만들어야 한다.
MarkupAndCodeBehindWindow는 Startup 이벤트 발생 시 발생하는 응용 프로그램 시작 시점에 인스턴스화된다. |
Show를 호출하여 여는 창은 모덜리스 창이다. 즉, 응용 프로그램은 사용자가 같은 응용 프로그램의 다른 창을 활성화할 수 있는 모드에서 동작한다. Show 예제 창
버튼을 클릭하여 새로운 창이 열려도, 비활성화인 창이 활성화될 수 있다. |
ShowDialog를 호출하여 대화 상자와 같은 창을 모달 형식으로 연다. 예제 창 버튼을 클릭하여 새로운 창이 열리면, 비활성화인 창을 활성화로 시킬 수 없다. |
또한 창을 열기 방법으로 StartupUri을 설정하여 응용 프로그램이 시작될 때 자동으로 열리는 첫번째 창을 지정할 수 있다.
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="AboutWPF창.App" StartupUri="MainWindow.xaml"/>
|
창 활성화 방지
인터넷 메신저 스타일 응용 프로그램의 대화 창이나 전자 메일 응용 프로그램의 알림 창과 같이 창이 표시될 때 활성화하지 않아야 하는 경우가 있다. 응용 프로그램에 표시될 때 활성화하지 않아야 할 창이 있는 경우에는 Show 메서드를 처음으로 호출하기 전에 해당 창의 ShowActivated 속성을 false로 설정할 수 있다. 이렇게 하면 아래와 같은 결과가 나타난다.
창이 활성화되지 않는다. 창의 Activated이벤트가 발생하지 않는다. 현재 활성 창이 활성 상태로 유지된다.
그러나 사용자가 클라이언트 영역이나 비클라이언트 영역을 클릭하여 창을 활성화하면 해당 창이 활성화 된다. 이 경우 다음과 같은 결과가 나타난다.
창이 활성화된다. 창의 Activated 이벤트가 발생한다. 이전에 활성 상태였던 창이 비활성화된다. 사용자의 동작에 대한 응답으로 창의 Deactivated 및 Activated 이벤트가 발생한다.
|
창을 활성화 하지 않고 표시하는 방법 예제 MainWindow.xaml.cs
ShowWindowwithActivation 버튼을 클릭하면 ChildWindow창을 활성화 하여 보여준다. ShowWindowwithoutActivation 버튼을 클릭하면 ChildWindow창을 비활성화 하여 보여준다.
ChildWindow.xaml & ChildWindow.xaml.cs
실행결과
Window 활성화 하여 보여주기 버튼을 클릭하게 되면 ChildWindow에 창이 비활성화 상태라는 문구를 나타내주고, Window를 활성화 하지 않고 보여주기 버튼을 클릭하게 되면 ChildWindow에 창이 비활성화 상태로 나타났다가 창의 클라이언트 영역이나 비 클라이언트 영역을 선택 시 창이 활성화가 되며 이 전 창은 자동으로 비활성화상태라는 문구를 나타내준다. | |||||||
창 닫기
창의 수명은 사용자가 창을 닫을 때 끝나게 된다. 창은 다음을 포함하여 비클라이언트 영역의 요소를 사용하여 닫을 수 있다.
시스템 메뉴의 닫기 항목 Alt + F4 누르기 닫기 단추 누르기
클라이언트 영역에 창을 닫기 위한 추가적인 메커니즘을 제공할 수 있으며 이 메커니즘에는 일반적으로 다음이 포함된다.
파일 메뉴의 끝내기 항목(일반적으로 기본 응용 프로그램 창) 파일 메뉴의 닫기 항목(일반적으로 보조 응용 프로그램 창) 취소 단추(일반적으로 모달 대화 상자) 닫기 단추(일반적으로 모덜리스 대화 상자)
이러한 사용자 지정 메커니즘 중 하나에 응답하여 창을 닫으려면 Close 메서드를 호출 해야 한다. |
창이 닫히면 Closing 및 Closed의 두 이벤트가 발생한다.
Closing 창이 닫히기 전에 발생하며 창 닫기를 방지할 수 있는 메커니즘을 제공한다. 대개 창이 닫히면 안 되는 한 가지 이유는 창 콘텐츠에 수정된 데이터가 있는 경우이다. 이 상황에서는 Closing 이벤트를 처리하여 데이터가 변경되었는지 검사하고, 변경되었으면 사용자에게 데이터를 저장하지 않고 창을 닫을 것인지 아니면 창 닫기를 취소할 것인지 묻는다.
창 닫기를 방지하기 위해 true로 설정한 Boolean Cancel 속성을 구현하는 CancelEventArgs를 Closing 이벤트 처리기가 전달한다. Closing이 처리되지 않거나, 처리는 되었지만 취소되지 않은 경우에는 창이 닫힌다. 창이 실제로 닫히기 직전에 Closed가 발생한다. 이 시점에서는 창 닫기를 방지할 수 없다. |
비클라이언트 및 클라이언트 영역에서 제공되는 메커니즘을 통해 창을 명시적으로 닫을 수 있지만, 창은 다음을 비롯하여 응용 프로그램 또는 Windows의 다른 부분에서 발생한 동작에 의해 암시적으로 닫힐 수도 있다.
사용자가 Windows를 로그오프하거나 종료하는 경우 창의 소요자가 닫히는 경우(Owner 참조) 기본 응용 프로그램 창이 닫히고 ShutdownMode가 OnMainWindowClose인 경우 Shutdown이 호출된다. |
창 수명 이벤트 | |
창의 수명에서 발생하는 주요 이벤트를 순서대로 보여주는 그림 |
활성화되지 않고 표시되는 창의 수명 동안 발생하는 주요 이벤트를 순서대로 보여줌 (창을 표시하기 전에 ShowActivated가 false로 설정됨) |
창 위치 |
창은 열릴 때 바탕 화면에 상대적인 x 및 y 크기의 위치를 가진다. 이 위치는 각각 Left및 Top속성을 검사하여 확인할 수 있다. 이 속성을 설정하여 창의 위치를 변경할 수 있다. 또한 WindowStartupLocation속성을 다음 WindowStartupLocation 열거형 값 중 하나로 설정하면 Window가 처음 나타날 때의 초기 위치를 지정할 수 있다. Manual(기본값) CenterScreen CenterOwner
시작 위치를 Manual로 지정하고 Left 및 Top 속성을 설정하지 않으면 Window가 Windows에게 표시될 위치를 묻는다. |
최상위 창 및 z 순서
창에는 x및 y위치 이외에도 다른 창과 상대적인 수직 위치를 결정하는 z차원의 위치도 있다. 이를 창의 z순서라고 하며 여기에는 일반 z순서와 최상위 z순서의 두 가지 유형이 있다. 일반z순서에서 창의 위치는 현재 활성화되었는지 여부에 따라 결정된다. 기본적으로 창은 일반 z순서로 배치된다. 최상위 z순서에서 창의 위치도 현재 활성화되었는지 여부에 따라 결정되며, 최상위 z수준의 창은 항상 일반 z 순서 창의 위에 위치 한다. 창의 Topmost 속성을 true로 설정하면 창이 최상위 z순서로 배치된다.
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Topmost="True"> ... </Window> |
창 모양 |
단추, 레이블 및 텍스트 상자와 같은 창 특정 콘텐츠를 창에 추가하여 창의 클라이언트 영역의 모양을 변경할 수 있다. 비클라이언트 영역을 구성하기 위해 Window는 창의 아이콘을 설정하는 Icon과 제목을 설정하는 Title같은 몇 가지 속성을 제공한다.
또한 창의 크기 조정 모드, 창 스타일 및 바탕 화면 작업 표시줄에 단추로 표시될 것인지 여부를 구성하여 비클라이언트 영역 테두리의 모양과 동작을 변경할 수도 있다. |
크기 조정 모드
WindowStyle 속성에 따라 사용자가 창의 크기를 조정하는 방법(그리고 조정 가능 여부)을 제어할 수 있다. 선택한 창 스타일에 따라 사용자가 마우스로 테두리를 끌어서 창 크기를 조정할 수 있는지 여부, 최소화, 최대화 및 크기 조정 단추가 비클라이언트 영역에 나타나는지 여부 및 나타나는 경우 해당 단추를 사용할 수 있는지 여부가 결정된다. ResizeMode 속성을 설정하여 창 크기를 조정하는 방법을 구성할 수 있다. ResizeMode 열거형 값 NoResize CanMinimize CanResize(기본값) CanResizeWithGrip WindowStyle과 마찬가지로 창의 크기 조정 모드는 수명 내에서 변경될 가능성이 낮기 때문에 대개의 경우 XAML 태그에서 설정한다. |
창 스타일
창의 비클라이언트 영역에서 노출되는 테두리는 대부분의 응용 프로그램에 적합하다. 하지만 창의 유형에 따라 다른 유형의 테두리가 필요하거나 전혀 필요 없는 경우가 있다. 창의 테두리 유형(WindowStyle) None SingleBorderWindow(기본값) ThreeDBorderWindow ToolWindow
|
작업 표시줄 표시 | |||
창의 기본 모양에는 다음 그림에서 볼 수 있는 것처럼 작업 표시줄 단추가 포함된다.
NotifyIcon을 사용하여 알림 아이콘을 구성하고 시스템 트레이에 표시하는 방법이다.
|
참고사이트