본문 바로가기

IT 살이/04. 기술 - 프로그래밍

04 Window

이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. 문서의 모든 차례를 보려면 SmartClient3.0 카테고리를 참조하기 바란다.

WPF
에서 윈도우는 Window로 구현된다. Window는 항상 독립형 애플리케이션에서는 컨텐트를 호스팅하는 기본적인 단위가 되어 왔다.

Visual Studio 2005에서 Project | Add New Item | Window(WPF) 를 선택하면 Window가 하나 프로젝트에 추가된다.

<!--MainWindow.xaml (markup)-->

<Window

  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  x:Class="BoxApplication.MainWindow"

</Window>

// MainWindow.xaml.cs (codebehind)

using System.Windows;

public partial class MainWindow : Window { ... }

Window가 하나 프로젝트에 추가되면 Visual Studio 2005는 그 빌드 타입을 자동으로 Page로 설정한다.

1398971973
그림 4 Window의 빌드 타입

빌드가 되면 마크업은 Window별 고유한 URI(Uniform Resource Identifier)로 인식할 수 있는 리소스로 된다. 결국 WPF에서는 URI를 이용해서 선언적인 방법으로 Window를 로딩할 수 있게 되고 다음 같은 정의를 이용해서 애플리케이션이 시작할 때 자동으로 오픈될 Window를 지정해 줄 수 있게 된다.

<!--App.xaml (markup)-->

<Application ... StartupUri="MainWindow.xaml"  />

이 마크업은 그림 5와 같은 윈도우를 보여준다. 모든 윈도우처럼, WPF윈도우도 클라이언트 영역(WPF 컨텐트와 컨트롤을 가지는 영역이다)와 비 클라언트 영역(보더, 타이틀바와 이것과 관련된 여러 요소들)으로 구성된다.

1354309477
그림 5 Window와 그 부분들

Application.StartupUri로 로딩되는 윈도우는 모달리스(modeless) 성격이다. 즉 모달리스 창을 사용하면서 사용자가 애플리케이션의 다른 윈도우를 사용할 수도 있다. 애플리케이션이 시작되면서 처음으로 생성한 윈도우이기 때문에 별 흥미로운 사실은 못된다. 만약 사용자가 애플리케이션에서 다른 모달리스 윈도우를 보여줄 필요가 있다면 Window.Show 메소드를 호출하면 된다.

// MainWindow.xaml.cs (codebehind)

public partial class MainWindow : Window

{

  void helpContentsMenuItem_Click(object sender, RoutedEventArgs e)

  {

  HelpWindow window = new HelpWindow();

  window.Owner = this; // Ensure window always appears above us

  window.Show();

  }

  ...

}

WPF는 윈도우를 모달로 보여줄 수도 있다. 즉 모달로 된 윈도우를 사용하면서 사용자가 애플리케이션의 다른 윈도우를 사용할 수 없도록 할 수 있다. 모달 창은 주로(항상 그런 것은 아니지만) 새로운 주문을 생성해야 하는 경우처럼 끝까지 완료할 필요가 있는 업무의 처리 과정에서 필요한 데이터를 수집하는데 사용된다. WPF에서 윈도우를 모달로 보여주기 위해서는 Window.ShowDialog 메소드를 호출하면 된다.

// MainWindow.xaml.cs (codebehind)

public partial class MainWindow : Window

{

  void CreateOrder()

  {

  // Place order

  OrderABoxDialog dlg = new OrderABoxDialog();

  dlg.Owner = this; // Ensure dialog box always appears above us

  bool? dialogResult = dlg.ShowDialog();

  // If order details are fine, add order to orders list

  if (dialogResult == true)

  {

     this.orders.Add(dlg.Order);

  }

  }

  ...

}

Window 클래스는 다이얼로그창의 일반적인 거동을 지원해서, 사용자가 다이얼로그 내용을 받아들이거나 취소할 수도 있고 그리고 창을 호출한 코드로 결과를 리턴해서 그 결과에 따라 적절한 처리를 할 수 있도록 해 줄 수도 있다. 메시지 박스는 다이얼로그 창의 특별한 형태로서, 사용자에게 정보를 출력하거나 질문을 던지기 위해 사용한다. WPF에서는 MessageBox 클래스로 메시지 박스를 지원한다.

// MainWindow.xaml.cs (codebehind)

public partial class MainWindow : Window

{

  void aboutMenuItem_Click(object sender, RoutedEventArgs e)

  {

  MessageBox.Show("Box Application, Version 1.0");

  }

  ...

}

메시지 박스, 다이얼로그창, 윈도우 그리고 애플리케이션은 독립형, 메뉴 기반의 애플리케이션 모델의 핵심을 이룬다. 이런 요소들은 오랫동안 이전의 프리젠테이션 기술이 지원해 오고 있다. 여기에 WPF 기술은 하이퍼링크 기반의 네비게이션을 지원하도록 확장했으며, 네비게이션 컨텐트의 기본 단위는 페이지가 된다.

'IT 살이 > 04. 기술 - 프로그래밍' 카테고리의 다른 글

05 Page  (0) 2009.04.23
03 애플리케이션 타입(Application Type)  (0) 2009.04.23
02 사용자 경험(User Experience)  (0) 2009.04.23