1.1 WPF 소개? XAML기반 HelloWorld 따라하기
n 2002년 정식으로 출시된 닷넷 프레임워크에서 윈폼 이라는 기술이 등장하여 윈도우 응용프로그램 개발을 주도했지만 요구가 다양해지면서 비디오, 미디어, 애니메이션, 2D, 3D그래픽 등을 다이나믹하게 사용할 수 있기를 원했지만 기존의 윈도우 플랫폼들에서 독립된 기술들로 분산되어 있었고 여러 다른 기술들을 각각 모두 이해해야만 통합된 개발이 가능했다. 결국 통합된 기술이 필요했는데 이러한 요구에서 만들어진 기술이 바로 WPF(Windows Presentation Foundation) 이다.
n WPF는 닷넷3.X부터 추가된 기술로 Vista에서 UX를 구현하기 위해 탄생되었으며 비주얼 스튜디오 2008에 추가 되었다.
n 시각적으로 뛰어난 사용자 환경에서 윈도우 응용 프로그램을 만들 수 있는 차세대 프레젠테이션 시스템으로 WPF를 이용하면 광범위한 독립 실행형 응용 프로그램과 브라우저에서 호스팅되는 응용 프로그램을 모두 만들 수 있다.
n WPF를 사용하여 Extensible Application Markup Language (XAML), 컨트롤, 데이터 바인딩, 레이아웃, 2-D 및 3-D 그래픽, 애니메이션, 스타일, 템플릿, 문서, 미디어, 텍스트, 입력 체계 등의 광범위한 응용 프로그램 개발이 가능하다.
n 클래스를 인스턴스화한 후 속성을 설정하고, 메서드를 호출하고, 이벤트를 처리하는 등의 모든 작업을 C#, VB.NET등의 익숙한 .NET Framework 프로그래밍 언어로 수행할 수 있다.
n WPF는 대부분 System.Windows 네임스페이스에 있는 클래스, 인터페이스들을 다룬다.
n WPF의 아키텍처는 실제로 다층 아키텍처로 WPF Managed Layer, WPF Unmanaged Layer 및 Core operating system 요소의 세 가지 레이어가 있으며 이러한 레이어는 전체 프레임 워크를 모으는 어셈블리 집합으로 해석할 수 있다.
n Managed Layer : Presentation Framework, Presentation Core 및 Window Base는 Managed Layer의 세 가지 주요 구성 요소로 공개 API는이 레이어를 통해서만 노출된다.
PresentationFramework.dll : 응용 프로그램을 빌드하는 데 필요한 응용 프로그램의 Windows, Panels, Styles Controls, Layouts, Content 등과 같은 고급 기능이 포함되어 있으며 data binding, time-dependencis, animation 등을 비롯한 최종 사용자 프레젠테이션 기능을 구현한다. (대부분의 클래스가 여기에 해당 된다.)
PresentationCore.dll : 2D, 3D, 기하학 등의 기능을 제공하는 WPF에 의해 노출 된 Low Level급 API 이다. 모든 도형들의 개체와 컨트롤이 파생되는 UIElement 타입과 Visual 타입을 포함한다. Presentation Core는 MILCore를 관리하는 래퍼 역할을하며 MIL(Media Integration Layer)용 공용 인터페이스를 제공한다. Presentation Core는 WPF Visual System의 기본이며 응용 프로그램 비주얼 트리를 만드는 데 필요한 클래스를 제공한다. Visual System은 Visual Elements 및 렌더링을 위한 응용 프로그램이 포함 된 시각적 트리를 만든다.
WindowsBase.dll : Dispatcher Objects 및 Dependency Objects와 같은 WPF 환경 외부에서 재사용 할 수 있는 요소를 보유하고 있다.
n Unmanaged Layer :
milCore.dll : WPF 렌더링의 핵심, WPF 응용 프로그램을 렌더링 하는 컴포지션 엔진의 기본 구성 요소로 Media Integration Layer (MIL)라고하며 milCore.dll에 존재한다. milCore의 목적은 DirectX와 직접 인터페이스하여 2D 및 3D 표면에 대한 기본 지원을 제공한다. 즉 DirectX와 CLR (더하기 레이어 이상) 간의 인터페이스로 MILCORE는 DirectX의 도움으로 2D, 3D, 애니메이션을 처리하는 Unmanaged 구성 요소 이다. Window Vista, 7의 필수적인 구성요소로 WPF에서의 모든 디스플레이는 DirectX 엔진을 통해 수행되므로 효율적인 하드웨어 및 소프트웨어 렌더링을 허용한다.
WindowsCodecs.dll : 이미지 처리, 이미지 표시 및 크기 조정 등과 같은 WPF 응용 프로그램의 이미징 지원을 위한 Low Level API로 WPF 화면으로 렌더링 될 벡터 그래픽으로 이미지를 인코딩 / 디코딩하는 여러 코덱으로 구성된다.
DirectX : WPF에서 모든 그래픽을 렌더링하는 Low Level API로 드라이버와 대화하고 내용을 렌더링 한다.
User32 : 메모리와 프로세스 분리를 관리하는데 모든 응용 프로그램에서 사용하는 기본 핵심 API로 어떤 요소가 화면의 어디에 배치 될지등을 결정한다.
GDI : 그래픽 장치 인터페이스(Graphic Device Interface)의 약자로 확장 된 그래픽 프리미티브 세트와 렌더링시 퀄리티 향상을 제공한다.
CLR : WPF는 전체 .NET Framework를 활용하고 CLR (Common Language Runtime)에서 실행된다.
Device Drivers : 운영 체제에 따라 다르며 저수준 API에 액세스하는 데 사용된다.
n 일반적으로 XAML 태그는 UI를 구현하는 데 사용되고 C# 비하인드 코드로 프로그램의 동작을 구현한다.
n XAML은 선언적으로 UI를 구현하는 데 사용되는 XML 기반 태그 언어로 일반적으로 창, 대화 상자, 페이지 및 사용자 정의 컨트롤을 만들고 이러한 항목을 컨트롤, 도형 및 그래픽으로 채우는 데 사용된다.
간단히 WPF HelloWorld를 만들어 보자.
1. Visual Studio 2017에서 Visual C# >> WPF 앱(.NET Framework)을 선택 후 프로젝트명은 WpfApp2으로 하자.
2. MainWindow.xaml을 더블클릭하여 XAML 디자인 화면을 열어서 Label, TextBox, Button 컨트롤을 그림처럼 배치하자. (TextBox : “txtName”, Button : “btnSayHello”)
3. 컨트롤을 올려서 완성된 MainWindow.xaml 코드
4. 버튼을 클릭하고 속성항에서 번개표시를 누르면 이벤트들이 나타나는데 Click 이벤트를 더블클릭 하여 이벤트 핸들러를 작성하자.
5. 완성된 MainWindow.xaml.cs
6. 실행화면(F5)
1.2 HelloWorld XAML기반 WPF 프로그램 작동 원리
n WPF 프로젝트를 생성하면 App.xaml, MainWindow.xaml 두개의 xaml 파일이 생성되는데 App.xaml이 App 라는 클래스로 메인 메소드(Main)를 가지면서 자동 생성되고 이 메인에서 MainWindow를 StartupUri로 지정해서 MainWindow가 처음 시작된다.
n App.xaml이 엔트리 포인트이며 앞에서 작성한 HelloWorld 프로젝트에서 App.g.cs 파일로 변환되어 생성된다. (App.g.i.cs 파일도 생성되는데 임시 파일로 보면 된다.)
n [App.g.cs]
n App.xaml의 코드 비하인드 파일이 App.xaml.cs로 하나의 App라는 이름의 부분 클래스로 생성된다.
n 만약 App.xaml StartupUri을 삭제하면 App.xaml.cs 소스코드에서 아래처럼 OnStartUp 메소드를 오버라이드 하면 된다.
n 물론 App.xaml, App.xaml.cs 파일을 모두 삭제하고 새로운 메인을 만들어도 된다.
[MyMain.cs]
n 만약 응용프로그램에서 Main 메소드를 가지는 클래스가 여러 개 라면 프로젝트의 속성에서 시작 클래스를 지정할 수도 있다.
댓글 없음:
댓글 쓰기