XAML을 사용하여 WPF(Windows Presentation Foundation) 앱 작성

이 책은 XAML 언어의 기능을 소개하고 XAML을 사용하여 WPF(Windows Presentation Foundation) 애플리케이션을 작성하는 방법을 보여줍니다.

  • XAML이란?

XAML은 선언적 마크업 언어입니다. .NET Core 프로그래밍 모델에 적용할 때 XAML은 .NET Core 앱용 UI 생성 프로세스를 간소화합니다. 선언적 XAML 태그에서 표시되는 UI 요소를 만든 다음 부분 클래스 정의를 통해 태그에 연결된 코드 숨김 파일을 사용하여 런타임 논리에서 UI 정의를 분리할 수 있습니다.

XAML은 어셈블리에 정의된 특정 지원 유형 집합을 사용하여 개체의 인스턴스화를 직접 표현합니다. 이것은 지원 유형 시스템과 직접적인 관계가 없는 일반적으로 해석되는 언어인 대부분의 다른 마크업 언어와 다릅니다. XAML은 각 당사자가 서로 다른 도구를 사용하여 응용 프로그램의 UI 및 논리를 처리할 수 있는 워크플로를 구현합니다.

다음 예제는 UI에서 버튼을 생성하는 방법을 보여줍니다. 이 예제는 XAML이 일반적인 형태의 UI 프로그래밍을 나타내는 방법을 처음으로 보여줍니다(완전한 예제는 아님).

구분에 주의하세요 xml xaml yaml wxml·
yaml은 Docker의 구성 언어이고 xml은 Android의 프런트 엔드 UI 언어이며 wxml은 WeChat 애플릿의 프런트 엔드 UI 언어입니다.

XAML 예제

<StackPanel>
    <Button Content="Click Me"/>
</StackPanel>

XAML로 구현된 WPF 인터페이스
다음 인터페이스는 Material Design UI 프레임워크를 사용합니다.
여기에 이미지 설명 삽입

1. XAML 구문 개요

다음 섹션에서는 XAML 구문의 기본 형식을 설명하고 간단한 태그 예제를 제공합니다.

1.2 XAML 개체 요소

개체 요소 구문은 항상 여는 꺾쇠 괄호(<)로 시작합니다. 그 뒤에 인스턴스를 생성할 유형의 이름이 옵니다. 개체 요소 태그를 완료하려면 닫는 꺾쇠 괄호(>)로 끝냅니다. 슬래시 뒤에 닫는 꺾쇠 괄호(/>)로 태그를 완성하여 내용 없이 자동으로 닫히는 형식을 사용할 수도 있습니다.

<StackPanel>
    <Button Content="Click Me"/>
</StackPanel>

1.2.1 속성 구문(속성)

개체의 속성은 종종 개체 요소의 속성으로 표현될 수 있습니다. 끈.

<Button Background="Blue" Foreground="Red" Content="This is a button"/>

1.2.2 속성 요소 구문

다음 예제에서는 이전 특성 구문 예제에서 동일한 속성을 설정하는 방법을 보여 주지만 이번에는 Button의 모든 속성에 대해 속성 요소 구문을 사용합니다.

<Button>
    <Button.Background>
        <SolidColorBrush Color="Blue"/>
    </Button.Background>
    <Button.Foreground>
        <SolidColorBrush Color="Red"/>
    </Button.Foreground>
    <Button.Content>
        This is a button
    </Button.Content>
</Button>

1.2.3 컬렉션 구문

특정 특성이 컬렉션 유형인 경우 마크업에서 특성 값 내의 자식 요소로 선언된 항목은 컬렉션의 일부가 됩니다. 이 경우 하위 개체 요소의 컬렉션은 컬렉션 속성의 값으로 설정됩니다.

다음 예제에서는 GradientStops 속성 값을 설정하기 위한 설정 구문을 보여줍니다.

<LinearGradientBrush>
    <LinearGradientBrush.GradientStops>
        <!-- no explicit new GradientStopCollection, parser knows how to find or create -->
        <GradientStop Offset="0.0" Color="Red" />
        <GradientStop Offset="1.0" Color="Blue" />
    </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

1.3 XAML 콘텐츠 속성

XAML은 클래스가 해당 속성 중 하나만 XAML 콘텐츠 속성으로 지정할 수 있는 언어 기능을 지정합니다. 객체(Border) 요소의 자식 요소(TextBox)는 콘텐츠 속성(Width)의 값(300)을 설정하는 데 사용됩니다. 즉, 콘텐츠 속성에 대해서만 XAML 마크업에서 속성을 설정할 때 속성 요소를 생략하고 마크업에서 보다 직관적인 부모/자식 형태를 생성할 수 있습니다.

예를 들어 Border는 Child의 콘텐츠 속성을 지정합니다. 다음 두 개의 Border 요소는 동일한 방식으로 처리됩니다. 첫 번째 요소는 콘텐츠 속성 구문을 활용하고 Border.Child 속성 요소를 생략합니다. 두 번째 요소는 Border.Child를 명시적으로 표시합니다.

<Border>
    <TextBox Width="300"/>
</Border>
<!--explicit equivalent-->
<Border>
    <Border.Child>
        <TextBox Width="300"/>
    </Border.Child>
</Border>

XAML 언어의 규칙에 따라 XAML 콘텐츠 특성 값은 다른 특성 요소 앞이나 뒤에 완전히 지정되어야 합니다. 예를 들어 다음 태그는 컴파일되지 않습니다.

<Button>I am a
  <Button.Background>Blue</Button.Background>
  blue button</Button>

다음은 컴파일됩니다

<Button>
<Button.Background>Blue</Button.Background>
I am a blue button
</Button>

1.3.1 콘텐츠 속성과 컬렉션 구문의 조합

다음 예를 고려하십시오.

<StackPanel>
  <Button>First Button</Button>
  <Button>Second Button</Button>
</StackPanel>

여기에서 각 Button은 StackPanel의 하위 요소입니다. 이것은 두 가지 이유로 두 개의 표시를 생략한 간단하고 직관적인 표시입니다.

StackPanel.Children 속성 요소 생략: StackPanel은 Panel에서 파생됩니다. Panel은 Panel.Children을 XAML 콘텐츠 속성으로 정의합니다.

UIElementCollection 개체 요소는 생략됩니다. Panel.Children 속성은 IList를 구현하는 UIElementCollection 형식을 사용합니다. IList와 같은 컬렉션을 처리하기 위한 XAML 규칙에 따라 컬렉션에 대한 요소 태그를 생략할 수 있습니다. (이 경우 UIElementCollection은 인수가 없는 생성자를 노출하지 않기 때문에 실제로 인스턴스화할 수 없습니다. 이것이 UIElementCollection 개체 요소가 주석 처리된 것으로 나타나는 이유입니다.)

<StackPanel>
  <StackPanel.Children>
      <Button>First Button</Button>
      <Button>Second Button</Button>
  </StackPanel.Children>
</StackPanel>

1.4 속성 구문

1.4.1 이벤트(클릭, 길게 누르기, 선택, 포커스 가져오기 등)

<Button Click="Button_Click" >Click Me!</Button>

이 특성 구문 예제 외에도 WPF의 이벤트 및 XAML에 대한 자세한 내용이 있습니다. 예를 들어 여기에서 참조된 ClickHandler가 무엇을 나타내고 어떻게 정의되는지 확인할 수 있습니다. 이에 대해서는 이 문서 뒷부분의 이벤트 및 XAML 코드 숨김 섹션에서 다룹니다.

1.4.2 XAML의 대소문자 및 공백

  • 일반적으로 XAML은 대/소문자를 구분합니다. 지원 유형을 확인하기 위해 WPF XAML은 CLR이 대소문자를 구분하는 것과 동일한 규칙에 따라 대소문자를 구분합니다.
  • XAML 언어 키워드 및 프리미티브도 대소문자를 구분합니다. 값이 항상 대소문자를 구분하는 것은 아닙니다.

값이 대소문자를 구분하는지 여부는 값을 사용하는 속성 또는 속성 값 형식과 연결된 형식 변환기의 동작에 따라 달라집니다. 예를 들어 Boolean 유형을 사용하는 속성은 true 또는 True를 동등한 것으로 간주할 수 있지만 문자열을 Boolean으로 변환하는 기본 WPF XAML 파서 유형 변환이 이미 해당 값을 동등한 것으로 허용하기 때문입니다.

1.4.3 마크업 확장

태그 확장은 XAML 언어 개념입니다. 속성 구문에 대한 값을 제공하는 데 사용될 때 중괄호({ 및 })는 마크업 확장 사용을 나타냅니다. WPF 애플리케이션 프로그래밍에서 가장 일반적으로 사용되는 태그 확장은 바인딩(데이터 바인딩 식용)과 리소스 참조 StaticResource 및 DynamicResource입니다.

예를 들어 다음 태그는 특성 구문을 사용하여 Style 속성 값을 설정합니다.

<Window x:Class="index.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="100" Width="300">
    <Window.Resources>
        <SolidColorBrush x:Key="MyBrush" Color="Gold"/>
        <Style TargetType="Border" x:Key="PageBackground">
            <Setter Property="BorderBrush" Value="Blue"/>
            <Setter Property="BorderThickness" Value="5" />
        </Style>
    </Window.Resources>
    <Border Style="{ 
        StaticResource PageBackground}">
        <StackPanel>
            <TextBlock Text="Hello" />
        </StackPanel>
    </Border>
</Window>

WPF에서 구체적으로 구현된 모든 XAML 태그 확장의 참조 목록은 WPF XAML 확장을 참조하세요. System.Xaml에서 정의하고 .NET Core XAML 구현에 더 광범위하게 사용할 수 있는 태그 확장의 참조 목록은 XAML 네임스페이스(x:) 언어 기능을 참조하세요. 태그 확장 개념에 대한 자세한 내용은 태그 확장 및 WPF XAML을 참조하세요.

1.5 유형 변환기

Thickness 구조는 XAML을 사용할 수 있는 typecast가 있는 유형의 예입니다. 두께는 중첩된 사각형의 측정값을 나타내며 여백과 같은 속성 값으로 사용할 수 있습니다. Thickness에 대한 형식 변환기를 배치하면 Thickness를 사용하는 모든 속성을 속성으로 지정할 수 있으므로 XAML에서 보다 쉽게 ​​지정할 수 있습니다. 다음 예제에서는 형식 변환 및 특성 구문을 사용하여 Margin에 대한 값을 제공합니다.

<Button Margin="10,20,10,30" Content="Click me"/>

다음 예제에서는 여백이 Thickness 개체 요소를 포함하는 속성 요소 구문을 통해 대신 설정됩니다.


<Button Content="Click me">
    <Button.Margin>
        <Thickness Left="10" Top="20" Right="10" Bottom="30"/>
    </Button.Margin>
</Button>

1.6 루트 요소 및 네임스페이스

XAML 파일은 올바른 형식의 XML 파일이자 유효한 XAML 파일이 되기 위해 하나의 루트 요소만 가질 수 있습니다. 일반적인 WPF 시나리오의 경우 WPF 애플리케이션 모델에서 눈에 띄는 루트 요소(예: 페이지의 경우 Window 또는 Page, 외부 사전의 경우 ResourceDictionary, 애플리케이션 정의의 경우 Application)를 사용합니다.

다음 예제에서는 Page인 WPF 페이지에 대한 일반적인 XAML 파일의 루트 요소를 보여줍니다.

<Page x:Class="index.Page1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Title="Page1">

</Page>

루트 요소에는 속성 xmlns 및 xmlns:x도 포함됩니다. 이러한 특성은 태그가 요소로 참조하는 지원 형식에 대한 형식 정의가 포함된 XAML 네임스페이스를 XAML 프로세서에 나타냅니다. xmlns 특성은 기본 XAML 네임스페이스를 명시적으로 나타냅니다.

xmlns 특성은 각 XAML 파일의 루트 요소에서만 절대적으로 필요합니다. WPF 어셈블리에서 XAML 요소를 참조하려면 기본 XAML 네임스페이스를 기본 xmlns로 선언하기만 하면 됩니다.

1.6.1x: 접두사

이전 루트 요소 예에서 접두사 x:는 XAML 네임스페이스 http://schemas.microsoft.com/winfx/2006/xaml을 매핑하는 데 사용되었습니다.

x:Key: ResourceDictionary(또는 다른 프레임워크의 유사한 사전 개념)에서 각 리소스에 대한 고유 키를 설정합니다. x:Key는 아마도 일반적인 WPF 응용 프로그램 마크업에서 모든 x: 사용의 90%를 차지할 것입니다.

<Page x:Class="index.Page1"
</Page>

x:Class : XAML 페이지에 대한 코드 숨김을 제공하는 클래스에 대한 CLR 네임스페이스 및 클래스 이름을 지정합니다. 모든 WPF 프로그래밍 모델에 대해 코드 숨김을 지원하려면 이러한 클래스가 필요하므로 리소스가 없더라도 거의 항상 매핑된 x:를 볼 수 있습니다.

x:Name : 개체 요소를 처리한 후 런타임 코드에 있는 인스턴스의 런타임 개체 이름을 지정합니다. 런타임 코드를 사용하여 초기화된 XAML에서 명명된 요소를 찾습니다. 이러한 속성 중 가장 일반적인 속성은 FrameworkElement.Name입니다.

x:Static : XAML 호환 속성이 ​​아닌 정적 값을 반환하는 참조를 활성화합니다.

x:Type : 유형 이름에서 유형 참조를 구성합니다. Type(예: Style.TargetType)을 사용하는 특성을 지정하는 데 사용되지만 특성에는 종종 기본 문자열-유형 변환 기능이 있으므로 x:Type 태그 확장 사용은 선택 사항입니다.

1.6.2 사용자 지정 접두사 및 사용자 지정 유형

고유한 사용자 지정 어셈블리 또는 PresentationCore, PresentationFramework 및 WindowsBase에 대한 WPF 코어 이외의 어셈블리의 경우 어셈블리를 사용자 지정 xmlns 매핑의 일부로 지정할 수 있습니다. 이 어셈블리의 형식은 시도 중인 XAML 사용을 지원하기 위해 형식이 올바르게 구현되는 한 XAML에서 참조할 수 있습니다.

다음은 XAML 태그에서 사용자 지정 접두사가 작동하는 방식에 대한 기본적인 예입니다.

접두사 custom은 루트 요소 태그에서 정의되며 응용 프로그램과 함께 패키지 및 제공되는 특정 어셈블리에 매핑됩니다. 이 어셈블리에는 일반 XAML 사용을 지원하는 것 외에도 WPF XAML 콘텐츠 모델의 이 특정 지점에 삽입할 수 있는 클래스 상속을 사용하기 위해 구현되는 NumericUpDown 형식이 포함되어 있습니다. 이 접두사를 사용하면 이 NumericUpDown 컨트롤의 인스턴스가 개체 요소로 선언되어 XAML 파서가 형식이 포함된 XAML 네임스페이스를 찾을 수 있으므로 형식 정의가 포함된 지원 어셈블리의 위치를 ​​찾을 수 있습니다.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:custom="clr-namespace:NumericUpDownCustomControl;assembly=CustomLibrary"
    >
  <StackPanel Name="LayoutRoot">
    <custom:NumericUpDown Name="numericCtrl1" Width="100" Height="60"/>
...
  </StackPanel>
</Page>

Assembly:부품(Component)과 구분하기 위한 부속품 또는 조립품

2 이벤트, XAML 마크업, 코드 숨김

2.1 XAML 마크업, 코드 숨김

대부분의 WPF 응용 프로그램에는 XAML 태그와 코드 숨김이 모두 포함되어 있습니다.

  • XAML 태그는 .xaml 파일로 작성됩니다.
  • Microsoft Visual Basic 또는 C#과 같은 CLR 언어는 코드 비하인드 파일을 작성하는 데 사용됩니다.

WPF 프로그래밍 및 애플리케이션 모델에서 XAML 파일을 태그 컴파일할 때 XAML 파일에 대한 XAML 코드 숨김 파일의 위치는 다음과 같이 식별됩니다.

XAML 루트 요소의 x:Class 특성으로 네임스페이스 및 클래스를 지정합니다.

지금까지 다룬 예제에서 몇 개의 버튼을 보았지만 그들 중 어느 것도 그들과 연관된 논리적 동작이 없습니다. 개체 요소에 동작을 추가하기 위한 기본 응용 프로그램은 요소 클래스의 기존 이벤트를 사용하고 해당 이벤트가 런타임에 발생할 때 특정 처리기를 호출하는 것입니다.

  • XAML 태그에서 처리기 이름과 함께 이벤트 이름을 지정합니다.
  • 코드 숨김에서 처리기를 구현하는 코드를 정의합니다.

XAML 마크업

<Window x:Class="index.Window2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window2" Height="450" Width="800">
    <StackPanel>
        <Button Click="Button_Click">Click me</Button>
    </StackPanel>
</Window>

뒤에 코드

private void Button_Click(object sender, RoutedEventArgs e)
{
    
    
    var buttonControl = (Button)e.Source;
    buttonControl.Foreground = Brushes.Red;
}

코드 숨김 파일은 CLR 네임스페이스 ExampleNamespace를 사용하고 ExamplePage를 해당 네임스페이스 내의 부분 클래스로 선언합니다. 이는 태그 루트에 제공된 ExampleNamespace.ExamplePage의 x:Class 속성 값과 동일합니다. WPF 태그 컴파일러는 루트 요소 형식에서 클래스를 파생시켜 컴파일하는 모든 XAML 파일에 대한 부분 클래스를 만듭니다. 동일한 partial 클래스를 정의하는 코드 숨김을 제공할 때 생성된 코드는 컴파일된 앱과 동일한 네임스페이스 및 클래스에 병합됩니다.

별도의 코드 숨김 파일을 만들 필요가 없는 경우 코드를 XAML 파일에 인라인할 수도 있습니다. 그러나 인라인 코드는 제한이 많은 덜 일반적인 접근 방식입니다. 자세한 내용은 WPF의 코드 숨김 및 XAML을 참조하세요.

2.2 라우팅 이벤트

라우트된 이벤트는 WPF의 기본이 되는 특수 이벤트 기능입니다. 라우팅된 이벤트를 통해 한 요소가 다른 요소에서 발생한 이벤트를 처리할 수 있습니다.

명명된 요소

  • 아래 내용은 영어에서 중국어로 번역되어 이해하기 어려우니 천천히 읽어주세요

기본적으로 XAML 개체 요소에는 고유 식별자나 개체 참조가 없습니다. 대신 코드에서 뷰 생성자를 호출하여 UI의 개체 요소를 생성한 다음 생성자를 사용하여 나중에 코드에서 해당 인스턴스를 참조할 수 있도록 변수를 설정합니다.

  • 코드 숨김은 XAML 개체 요소를 어떻게 찾습니까?

XAML은 x:Name 특성을 정의합니다. x:Name 특성의 값은 모든 개체 요소에 설정할 수 있습니다.

코드 숨김에서 선택된 식별자는 생성된 인스턴스를 참조하는 인스턴스 변수와 동일합니다. 모든 측면에서 명명된 요소는 개체 인스턴스(이름은 인스턴스 참조)처럼 작동하며 코드 숨김은 명명된 요소를 참조하여 앱 내에서 런타임 상호 작용을 처리할 수 있습니다.
인스턴스와 변수 간의 이러한 연결은 WPF XAML 태그 컴파일러에 의해 구현되며 특히 이 문서에서 자세히 설명하지 않는 InitializeComponent와 같은 기능 및 패턴과 관련됩니다.

WPF 프레임워크 수준 XAML 요소는 XAML에서 정의한 x:Name 특성과 동일한 Name 속성을 상속합니다. 다른 특정 클래스도 x:Name(종종 Name 속성으로도 정의됨)에 해당하는 속성 수준을 제공합니다. 일반적으로 선택한 요소/유형의 구성원 테이블에서 이름 특성을 찾을 수 없는 경우 대신 x:Name을 사용할 수 있습니다. x:Name 값은 특정 하위 시스템이나 FindName과 같은 유틸리티 메서드를 통해 런타임에 사용할 수 있는 XAML 요소에 대한 식별자를 제공합니다.

Android를 공부한 학생은 findViewById()를 기억하나요?
애플릿을 공부한 학생은 findCompent()가
실제로 FindName 메서드와 같다는 것을 기억하나요?

다음 예제에서는 StackPanel 요소에 이름을 설정합니다. 해당 StackPanel의 버튼에 대한 핸들러는 buttonContainer(Name으로 설정)에 대한 인스턴스 참조로 StackPanel을 참조합니다.

<StackPanel Name="buttonContainer">
    <Button Click="RemoveThis_Click">Click to remove this button</Button>
</StackPanel>
private void RemoveThis_Click(object sender, RoutedEventArgs e)
{
    
    
    var element = (FrameworkElement)e.Source;
    
    if (buttonContainer.Children.Contains(element))
        buttonContainer.Children.Remove(element);
}

XAML 이름은 예측 가능한 범위 내에서 고유성을 적용합니다. 페이지의 기본 태그는 페이지의 루트 요소로 묶인 고유한 XAML 이름 범위를 나타냅니다.

2.3 추가 속성 및 추가 이벤트

XAML은 속성이나 이벤트가 설정된 요소의 형식 정의에 속성이나 이벤트가 없는 경우에도 특정 속성이나 이벤트를 모든 요소에 지정할 수 있도록 하는 언어 기능을 지정합니다. 이 함수의 속성 버전을 연결된 속성이라고 하고 이벤트 버전을 연결된 이벤트라고 합니다.

개념적으로 연결된 속성 및 연결된 이벤트는 모든 XAML 요소/개체 인스턴스에 설정할 수 있는 전역 멤버로 생각할 수 있습니다. 그러나 요소/클래스 또는 더 큰 인프라는 추가된 값에 대한 지원 속성 저장소를 지원해야 합니다.

XAML의 연결된 속성은 일반적으로 특성 구문을 통해 사용됩니다. 속성 구문에서 추가 속성은 ownerType.propertyName 형식으로 지정할 수 있습니다.

표면적으로 이는 속성 요소 사용과 비슷하지만 이 경우 지정된 ownerType은 연결된 속성이 설정되는 개체 요소와 항상 다른 형식입니다. ownerType 이 형식은 연결된 속성의 값을 가져오거나 설정하기 위해 XAML 프로세서에 필요한 접근자 메서드를 제공합니다.

附加属性的最常见方案是使子元素向其父元素报告属性值。

다음 예제에서는 DockPanel.Dock 연결된 속성을 보여줍니다. DockPanel 클래스는 DockPanel.Dock에 대한 접근자를 정의하며 추가 속성이 있습니다. DockPanel 클래스에는 자식 요소를 반복하고 특히 각 요소에 DockPanel.Dock 설정 값이 있는지 확인하는 논리도 포함되어 있습니다. 값이 발견되면 레이아웃 중에 하위 요소를 배치하는 데 사용됩니다. DockPanel.Dock 연결된 속성과 이 위치 지정 기능을 사용하는 것은 실제로 DockPanel 클래스의 흥미로운 측면입니다.

<DockPanel>
    <Button DockPanel.Dock="Left" Width="100" Height="20">I am on the left</Button>
    <Button DockPanel.Dock="Right" Width="100" Height="20">I am on the right</Button>
</DockPanel>

WPF에서 대부분의 또는 모든 연결된 속성은 종속성 속성으로도 구현됩니다.

연결된 이벤트는 ownerType.eventName 특성과 유사한 구문을 사용합니다. 연결되지 않은 이벤트와 마찬가지로 XAML의 연결된 이벤트에 대한 특성 값은 이벤트가 요소에서 처리될 때 호출되는 처리기 메서드의 이름을 지정합니다. WPF XAML에서 연결된 이벤트를 사용하는 것은 일반적이지 않습니다.

3. 기본 유형

기본 WPF XAML 및 해당 XAML 네임스페이스는 CLR 개체 및 XAML의 태그 요소에 해당하는 형식의 컬렉션입니다. 그러나 모든 클래스를 요소에 매핑할 수 있는 것은 아닙니다. ButtonBase와 같은 추상 클래스 및 특정 비추상 기본 클래스는 CLR 개체 모델에서 상속에 사용됩니다. 기본 클래스(추상 클래스 포함)는 모든 구체적인 XAML 요소가 해당 계층 구조의 기본 클래스에서 멤버를 상속하므로 XAML 개발에 여전히 중요합니다. 일반적으로 이러한 멤버에는 처리할 수 있는 요소 또는 이벤트의 속성으로 설정할 수 있는 특성이 포함됩니다. FrameworkElement는 WPF 프레임워크 수준에서 WPF의 특정 UI 기본 클래스입니다. UI를 디자인할 때 FrameworkElement에서 파생되는 다양한 모양, 패널, 데코레이터 또는 컨트롤 클래스를 사용합니다. 관련 기본 클래스인 FrameworkContentElement 는 FrameworkElement의 API를 의도적으로 미러링하는 API를 사용하여 흐름 레이아웃 표현에 적합한 문서 지향 요소를 지원합니다. 요소 수준 특성과 CLR 개체 모델의 조합은 구체적인 XAML 요소 및 기본 형식에 관계없이 대부분의 구체적인 XAML 요소에 설정할 수 있는 공통 속성 집합을 제공합니다.

4. 보안

XAML은 개체 인스턴스화 및 실행을 직접 나타내는 태그 언어입니다. 따라서 XAML에서 생성된 요소는 애플리케이션 코드와 마찬가지로 시스템 리소스(예: 네트워크 액세스, 파일 시스템 IO)와 상호 작용할 수 있습니다. 또한 XAML은 호스팅 앱과 동일한 시스템 리소스에 대한 액세스 권한을 가집니다.

WPF의 CAS(코드 액세스 보안)
.NET Framework와 달리 .NET용 WPF는 CAS를 지원하지 않습니다.

코드
XAML에서 XAML 로드는 전체 UI를 정의하는 데 사용할 수 있지만 경우에 따라 XAML에서 UI의 일부를 정의하는 것이 적절합니다. 이 기능은 다음 용도로 사용할 수 있습니다.

부분 사용자 지정을 활성화합니다.
UI 정보를 로컬에 저장합니다.
비즈니스 개체를 모델링합니다.


  • 업데이트 날짜: 2022년 12월 1일 14:33:08

Supongo que te gusta

Origin blog.csdn.net/gao511147456/article/details/128130050
Recomendado
Clasificación