Element 와 Attribute

XAML 은 XML 기반이기떄문에 element와 attribute를 사용한다. 그러나 element를 닷넷 객체 혹은 구조체와 상응하는 의미로

object element라고 한다. attribute는 property attribute와 event attribute로 구분하며 property attribute는 property로 event attribute는 event로

XML namespace는 CLR 네임스페이스로 각각 맵핑된다.

 

XAML에서 object element를 선언하면 항상 기본 생성자(default contructor) 를 사용해서 상응하는 닷넷 객체를 생성하는 것과 동일하고

property attribute를 설정하는 것도 생성된 닷넷객체에 동일한 프로퍼티를 설정하는 것과 동일하다.

event attribute를 설정하면 객체의 이벤트 처리기와 연결된다.

 

런타임시에 이벤트 처리기는 XAML에서 선언된 객체가 인스턴스화 될때 어떤 프로퍼티보다 먼저 추가된다.

 

Namespace

네임스페이스에 쓰인 schemas.microsoft.com이라는 URL은 임의의 네임스페이스를 구별하기 위한 키워드정도로 생각하면 된다.

XAML 파일의 루트 엘리먼트는 적어도 하나의 XML 네임스페이스가 사용되어야 한다. 

그래야만 자신과 자식 엘리먼트가 적절하게 맵핑된다. 기본 네임스페이스를 추가할때는 적절한 접두어를 사용해야 한다.

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

 

Property Attribute

ex.

System.Windows.Control.Button b = new System.Windows.Control.Button();

System.Windows.Shapes.Rectangle r = new System.Windows.Shapes.Rectangle();

r.Width = 40;

r.Height = 40;

r.Fill = System.Windows/Media.Brushes.Black;

b.Content = r;

 

XAML에서표현이 다소 길어지는 단점을 감수하고서라도 복잡한 프로퍼티를 설정할수 있는 대안을 제공하는데 그것이 Property Element이다.

프로퍼티 엘리먼트를 사용하면 다음처럼 변경할수 있다

<Button >

<Button.Content>

<Rectangle Height="40" Width="40" Fill="Black">

</Button.Content>

</Button>

C# 코드와 동일한 결과를 얻기 위해서 컨텐트 프로퍼티로 어트리뷰트 대신에 엘리먼트를 사요앻ㅆ다. Button다음의 (.)이 프로퍼티 엘리먼트와 오브젝트 엘리먼트를 구분해준다.

프로퍼티 엘리먼트는 항상 타입명,프로퍼티의 형태로 쓰이며 타입명으로 쓰인 오브젝트 엘리먼트의 내부에 포함되고 자신은 어떤 어트리뷰트도 갖지 않는다.

프로퍼티 엘리먼트는 단순한 프로퍼티로 사용할수도 있다.

ex.<Button Content = "OK" Background="White"/>

이 것을 프로퍼티 엘리먼트로 표현한다면

<Button>

<Button.Content>

OK

</Button.Contetn>

<Button.Background>

Whilte

</Button.Background>

</Button>

 

Type Converter

XAML 파서나 컴파일러는 문자열을 적절한 데이터 타입으로 바꿔주는 타입 컨버터를 찾는다. 모든 타입 컨버터는 TypeConverter 클래스에서 파생된 클래스들이다.

물론, 독자적인 타임컨버터를 만들수도 있다. 타입컨버터는 일반적으로 대소문자 구별하지 않는다.

 

Markup Extension

XAML로 표현할수 있는 범위를 확장해준다. 타입 컨버터와 이것은 보통 런타임시에 주어진 값을 체크해서 문자열에 맞는 적절한 객체를 생성한다.

ex <Button Background = "{x:Null}" Height = "{x:Static SystemParameters.IconHeight}" Content="{Binding Path= Height, RelativeSource = {RelativeSource Self}}"/>

중괄호에 정의된 값들은 접두사를 제외한 첫번째 식별자가 마크업 확장식 클래스의 이름이다. 일반적으로 XAML에서는 클래스와 달리 접미사를 떼고 사용한다.

 

Object Element의 자식요소들

오브젝트 엘리먼트는 보통 세가지 형대틔 자식 엘리먼트를 가질수 있다

컨텐트 프로퍼티

대부분의 WPR 클래스들은 사용자 지정 어트리 뷰트를 사용해서 XML 엘리먼트 안쪽의 내용과 관계없이 프로퍼티를 설정할수 있도록 설계되었다.그 역할을 하는 것이 바로 content property이다.

컨텐트 프로퍼티는 실제로 content 키워드 외에 어떤 것도 필요로 하지 않는다. 주의 할  것은 ListBox, TabControl, ComboBox처럼 몇몇 컨트롤은

컨텐트 프로퍼티를 대신해서 아이템즈(items)프로퍼티를 사용한다.

ex.A 방식

<Button>OK</Button>

B 방식

<Button>

<Button.Content>

<Rectangle Height="40" Width="40" Fill="Black">

</Button.Content>

</Button>

C방식

<Button>

<Rectangle Height="40" WIdth="40" Fill="Black">

</Button>

컬렉션아이템

XAML은 인덱싱을 지원하는 list와 Dictionary 등 두가지 컬렉션 형태의 프로퍼티를 갖고 있다.

리스트 - ArrayList처럼 System.Collections.IList를 구현한 컬렉션이다.

ex.

<ListBox >

<ListBox.Items>

<ListBoxItem Content="1"/>

<ListBoxItem Content="2"/>

</ListBox.Items>

</ListBox>

 

Items는 리스트박스의 컨텐트 프로퍼티이기때문에 다음처럼 줄일수 있다.

<ListBox >

<ListBoxItem Content="1"/>

<ListBoxItem Content="2"/>

</ListBox>

 

딕셔너리 - 다음에 다시

 

이 글은 스프링노트에서 작성되었습니다.

by 무위자연 2009. 1. 28. 14:56