2017년 6월 11일 일요일

WPF Tutorial 강좌 번역 #5 - XAML의 기본

source(출처) - http://www.wpf-tutorial.com/xaml/basic-xaml/

WPF Tutorial 강좌 번역 #5

XAML의 기본

이전 장에서는 XAML의 정의와 사용 방법에 대해 설명했지만 XAML에서 컨트롤을 만드는 방법은 무엇입니까?

<예제 1>
다음 예제에서 볼 수 있듯이 XAML에서 컨트롤을 만드는 것은 이름을 쓰는 것만큼 쉽고 꺾쇠 괄호로 묶습니다. 예를 들어 Button은 다음과 같습니다.
<Button>
XAML 태그는 끝 태그를 쓰거나 시작 태그의 끝에 슬래시를 넣어 종료해야합니다.
<Button></Button>
또는
<Button />

<예제 2>
많은 컨트롤을 사용하면 시작 태그와 종료 태그 사이에 내용을 넣을 수 있습니다. 그러면 내용이 컨트롤의 내용이됩니다.
예를 들어 Button 컨트롤을 사용하면 시작 태그와 종료 태그 사이에 표시된 텍스트를 지정할 수 있습니다.
<Button>A button</Button>
HTML은 대 / 소문자를 구분하지 않지만 XAML은 컨트롤 이름이 .NET Framework의 형식과 일치해야한다.
컨트롤의 속성에 해당하는 특성 이름도 마찬가지입니다. 다음은 태그에 속성을 추가하여 두 개의 속성을 정의하는 버튼입니다.
<Button FontWeight="Bold" Content="A button" />
FontWeight 속성을 설정하여 굵은 텍스트를 표시 한 다음 시작 및 끝 태그 사이에 텍스트를 쓰는 것과 같은 Content 속성을 설정합니다. 그러나 Control의 모든 속성은 Control-Dot-Property 표기법을 사용하여 주 제어의 하위 태그로 표시되는 다음과 같이 정의 될 수 있습니다.
<Button>
    <Button.FontWeight>Bold</Button.FontWeight>
    <Button.Content>A button</Button.Content>
</Button>
결과는 위와 완전히 똑같습니다.이 경우 구문과 그 밖의 것은 없습니다. 그러나 많은 컨트롤을 사용하면 텍스트가 아닌 다른 컨트롤 (예 : 다른 컨트롤)을 사용할 수 있습니다.

<예제 3>
다음은 Button 내부에서 여러 TextBlock 컨트롤을 사용하여 동일한 버튼에 다른 색상의 텍스트가있는 예제입니다.
<Button>
    <Button.FontWeight>Bold</Button.FontWeight>
    <Button.Content>
        <WrapPanel>
            <TextBlock Foreground="Blue">Multi</TextBlock>
            <TextBlock Foreground="Red">Color</TextBlock>
            <TextBlock>Button</TextBlock>
        </WrapPanel>
    </Button.Content>
</Button>
Content 속성은 하나의 자식 요소 만 허용하므로 WrapPanel을 사용하여 다른 색상의 텍스트 블록을 포함합니다.
WrapPanel과 같은 패널은 WPF에서 중요한 역할을하며 나중에 더 자세히 설명 할 것입니다. 현재는 다른 컨트롤의 컨테이너로 간주합니다.

똑같은 결과는 다음과 같은 마크 업을 사용하여 수행 할 수 있습니다.
<Button FontWeight="Bold">
    <WrapPanel>
        <TextBlock Foreground="Blue">Multi</TextBlock>
        <TextBlock Foreground="Red">Color</TextBlock>
        <TextBlock>Button</TextBlock>
    </WrapPanel>
</Button>

Code vs. XAML


다행히도 위의 예제를 통해 XAML은 매우 쉽게 작성 될 수 있지만 여러 가지 방법으로 작성 할 수 있음을 보여줍니다.
위 예제와 같은 결과를 가져오는 C# 코드 :
Button btn = new Button();
btn.FontWeight = FontWeights.Bold;
WrapPanel pnl = new WrapPanel();
TextBlock txt = new TextBlock();
txt.Text = "Multi";
txt.Foreground = Brushes.Blue;
pnl.Children.Add(txt);

txt = new TextBlock();
txt.Text = "Color";
txt.Foreground = Brushes.Red;
pnl.Children.Add(txt);

txt = new TextBlock();
txt.Text = "Button";
pnl.Children.Add(txt);

btn.Content = pnl;
this.Content = btn;




















댓글 없음:

댓글 쓰기