요약 - 8장. 코드와 XAML의 조화

Download Sample 샘플 다운로드

참고 항목

이 책은 2016년 봄에 출간되었으며, 그 후로 업데이트되지 않았습니다. 이 책의 많은 내용이 지금까지도 무척 유용하나, 일부 내용은 오래되었고 올바르지 않거나 완전하지 않은 주제도 있습니다.

이 장에서는 XAML을 보다 깊이 살펴보고 코드와 XAML이 상호 작용하는 방식을 중점적으로 설명합니다.

인수 전달

일반적인 경우 XAML에서 인스턴스화된 클래스에는 매개 변수가 없는 퍼블릭 생성자가 있어야 합니다. 결과 개체는 속성 설정을 통해 초기화됩니다. 그러나 두 가지 다른 방법으로 개체를 인스턴스화하고 초기화할 수 있습니다.

이러한 방법은 범용 기술이지만 일반적으로 MVVM View Model에 연결하는 데 사용됩니다.

인수가 포함된 생성자

ParameteredConstructorDemo 샘플에서는 x:Arguments 태그를 사용하여 생성자 인수를 지정하는 방법을 보여줍니다. 이러한 인수는 인수의 형식을 나타내는 요소 태그로 구분되어야 합니다. 기본 .NET 데이터 형식의 경우 다음 태그를 사용할 수 있습니다.

  • x:Object
  • x:Boolean
  • x:Byte
  • x:Int16
  • x:Int32
  • x:Int64
  • x:Single
  • x:Double
  • x:Decimal
  • x:Char
  • x:String
  • x:TimeSpan
  • x:Array
  • x:DateTime

XAML에서 메서드를 호출할 수 있나요?

FactoryMethodDemo 샘플에서는 x:FactoryMethod 요소를 사용하여 개체를 만들 때 호출되는 팩터리 메서드를 지정하는 방법을 보여줍니다. 이러한 팩터리 메서드는 공개적이고 고정적이어야 하며 정의된 형식의 개체를 만들어야 합니다. (예를 들어 메서드는 Color.FromRgb public이고 정적이며 형식 Color의 값을 반환하기 때문에 한정됩니다.) 팩터리 메서드에 대한 인수는 태그 내에 x:Arguments 지정됩니다.

x:Name 특성

x:Name 특성을 사용하면 XAML에서 인스턴스화된 개체에 이름을 지정할 수 있습니다. 이러한 이름에 대한 규칙은 C# 변수 이름과 동일합니다. 생성자에서 InitializeComponent 호출을 반환하고 나면 코드 숨김 파일이 이러한 이름을 참조하여 해당 XAML 요소에 액세스할 수 있습니다. 이름은 실제로 XAML 파서를 통해 생성된 partial 클래스의 프라이빗 필드로 변환됩니다.

XamlClock 샘플에서는 x:Name을 사용하여 코드 숨김 파일이 XAML에서 정의된 두 개의 Label 요소를 현재 날짜 및 시간으로 업데이트된 상태로 유지할 수 있도록 하는 방법을 보여줍니다.

같은 페이지의 여러 요소에 동일한 이름을 사용할 수 없습니다. 특히 OnPlatform을 사용하여 각 플랫폼에 동일하게 명명된 개체를 만드는 경우가 문제입니다. PlatformSpecificLabele 샘플에서는 이와 같은 작업을 수행하는 더 좋은 방법을 보여줍니다.

사용자 지정 XAML 기반 뷰

XAML에서 태그의 반복을 방지하는 여러 가지 방법이 있습니다. 일반적인 기법 중 하나는 ContentView에서 파생되는 새로운 XAML 기반 클래스를 만드는 것입니다. 이 기법은 ColorViewList 샘플에서 설명합니다. ColorView 클래스는 ContentView에서 파생되어 특정 색 및 해당 이름을 표시하는 반면 ColorViewListPage 클래스는 일반적인 방법으로 ContentPage에서 파생되고 명시적으로 17개의 ColorView 인스턴스를 만듭니다.

XAML에서 ColorView 클래스에 액세스하려면 동일한 어셈블리의 클래스에 대한 다른 XML 네임스페이스 선언(일반적으로 local로 명명됨)이 필요합니다.

이벤트 및 처리기

이벤트는 XAML에서 이벤트 처리기에 할당될 수 있지만 이벤트 처리기 자체는 코드 숨김 파일에 구현되어야 합니다. XamlKeypad는 XAML에서 키패드 사용자 인터페이스를 빌드하는 방법과 코드 숨김 파일에서 Clicked 처리기를 구현하는 방법을 보여줍니다.

탭 제스처

모든 View 개체는 터치 입력을 가져오고 해당 입력에서 이벤트를 생성할 수 있습니다. View 클래스는 GestureRecognizer에서 파생되는 클래스의 인스턴스를 하나 이상 포함할 수 있는 GestureRecognizers 컬렉션 속성을 정의합니다.

TapGestureRecognizerTapped 이벤트를 생성합니다. MonkeyTap 프로그램은 TapGestureRecognizer 개체를 4개의 BoxView 요소에 연결하여 모조 게임을 만드는 방법을 보여줍니다.

Triple screenshot of monkey tap

그러나 MonkeyTap 프로그램에는 소리가 필요합니다. (다음 장을 참조하세요.)