XAML 개요 (WPF)XAML overview (WPF)

이 항목에서는 XAML 언어의 기능을 설명하고 XAML을 사용하여 WPF(Windows Presentation Foundation)Windows Presentation Foundation (WPF) 애플리케이션을 작성하는 방법을 보여 줍니다.This topic describes the features of the XAML language and demonstrates how you can use XAML to write WPF(Windows Presentation Foundation)Windows Presentation Foundation (WPF) applications. 이 항목에서는 특히 WPFWPF에서 구현된 XAML에 대해 자세히 설명합니다.This topic specifically describes XAML as implemented by WPFWPF. XAML 자체는 WPFWPF보다 큰 언어 개념입니다.XAML itself is a larger language concept than WPFWPF.

XAML이란?What is XAML?

XAML은 선언적 태그 언어입니다.XAML is a declarative markup language. .NET Framework 프로그래밍 모델에 적용 된 XAML은 .NET Framework 응용 프로그램 UIUI 에 대 한 만들기를 간소화 합니다.As applied to the .NET Framework programming model, XAML simplifies creating a UIUI for a .NET Framework application. 선언적 XAML 태그에 UIUI 표시 되는 요소를 만든 다음 partial 클래스 정의를 UIUI 통해 태그에 조인 된 코드 파일을 사용 하 여 런타임 논리에서 정의를 구분할 수 있습니다.You can create visible UIUI elements in the declarative XAML markup, and then separate the UIUI definition from the run-time logic by using code-behind files that are joined to the markup through partial class definitions. XAML은 어셈블리에 정의된 특정 지원 형식 집합으로 개체의 인스턴스화를 직접 나타냅니다.XAML directly represents the instantiation of objects in a specific set of backing types defined in assemblies. 이는 지원 형식 시스템에 직접 연결되지 않고 해석되는 언어인 대부분의 다른 태그 언어와의 차이점입니다.This is unlike most other markup languages, which are typically an interpreted language without such a direct tie to a backing type system. XAML은 개별 대상이 잠재적으로 서로 다른 도구를 사용하여 애플리케이션의 논리와 UIUI에 대해 작업할 수 있는 워크플로를 가능하게 합니다.XAML enables a workflow where separate parties can work on the UIUI and the logic of an application, using potentially different tools.

텍스트로 나타내는 경우 XAML 파일은 일반적으로 확장명이 .xaml인 XML 파일입니다.When represented as text, XAML files are XML files that generally have the .xaml extension. 이 파일은 모든 XML 인코딩 방식으로 인코딩될 수 있지만 일반적으로 UTF-8로 인코딩됩니다.The files can be encoded by any XML encoding, but encoding as UTF-8 is typical.

다음 예제에서는 UIUI의 일부로 단추를 만드는 방법을 보여 줍니다.The following example shows how you might create a button as part of a UIUI. 이 예제는 XAML이 일반적인 UIUI 프로그래밍 비유를 어떻게 나타내는지를 보여 주기 위한 것이며 전체 샘플이 아닙니다.This example is just intended to give you a flavor of how XAML represents common UIUI programming metaphors (it is not a complete sample).

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

간단한 XAML 구문XAML syntax in brief

다음 섹션에서는 XAML 구문의 기본 형식에 대해 설명하고 간단한 태그 예제를 제공합니다.The following sections explain the basic forms of XAML syntax, and give a short markup example. 각 구문 형식에 대해 자세하게 설명하지는 않습니다. 예를 들어, 지원 형식 시스템에서 이러한 구문을 어떻게 나타내는지에 대해서는 설명하지 않습니다.These sections are not intended to provide complete information about each syntax form, such as how these are represented in the backing type system. 이 항목에 소개된 각 구문 형식의 XAML 구문에 대한 자세한 내용은 XAML 구문 정보를 참조하세요.For more information about the specifics of XAML syntax for each of the syntax forms introduced in this topic, see XAML Syntax In Detail.

XML 언어에 이미 익숙한 경우 다음 일부 단원에서 설명하는 내용 중 대부분은 초보적인 것일 수 있습니다.Much of the material in the next few sections will be elementary to you, if you have previous familiarity with the XML language. 이는 XAML의 기본적 설계 원칙 중 하나에 따른 결과입니다.This is a consequence of one of the basic design principles of XAML. XAML 언어는 자체의 개념을 정의 하지만 이러한 개념은 XML 언어 및 태그 형식에서 작동 합니다.The XAML language defines concepts of its own, but these concepts work within the XML language and markup form.

XAML 개체 요소XAML object elements

일반적으로 개체 요소는 특정 형식의 인스턴스를 선언합니다.An object element typically declares an instance of a type. 이 형식은 XAML을 언어로 사용하는 기술에 지원 형식을 제공하는 어셈블리에 정의되어 있습니다.That type is defined in the assemblies that provide the backing types for a technology that uses XAML as a language.

개체 요소 구문은 항상 여는 꺾쇠 괄호(<)로 시작합니다.Object element syntax always starts with an opening angle bracket (<). 괄호 뒤에 인스턴스를 만들려는 형식의 이름이 나옵니다.This is followed by the name of the type where you want to create an instance. 이름에는 접두사가 포함될 수 있으며, 이 개념에 대해서는 나중에 설명할 것입니다. 이름 뒤에는 개체 요소의 특성을 선택적으로 선언할 수 있습니다.(The name can possibly include a prefix, a concept that will be explained later.) After this, you can optionally declare attributes on the object element. 개체 요소 태그를 완료하려면 닫는 꺾쇠 괄호(>)로 끝냅니다.To complete the object element tag, end with a closing angle bracket (>). 또는 슬래시와 닫는 꺾쇠 괄호를 연속해서 사용하여(/>) 태그를 완료하는 것과 같이 콘텐츠가 없는 자체 닫는 형식을 사용할 수도 있습니다.You can instead use a self-closing form that does not have any content, by completing the tag with a forward slash and closing angle bracket in succession (/>). 예를 들어, 앞에서 나왔던 태그 조각을 다시 살펴보겠습니다.For example, look at the previously shown markup snippet again:

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

이 코드는 <StackPanel>(콘텐츠 및 나중에 닫는 태그 있음) 및 <Button .../>(자체 닫는 형식, 여러 특성이 있음)이라는 두 개의 개체 요소를 지정합니다.This specifies two object elements: <StackPanel> (with content, and a closing tag later), and <Button .../> (the self-closing form, with several attributes). 개체 요소 StackPanelButton은 각각 WPFWPF에 정의된 클래스 이름으로 매핑되며 WPFWPF 어셈블리의 일부입니다.The object elements StackPanel and Button each map to the name of a class that is defined by WPFWPF and is part of the WPFWPF assemblies. 개체 요소 태그를 지정할 때 새 인스턴스를 만드는 XAML 처리에 대한 명령을 만듭니다.When you specify an object element tag, you create an instruction for XAML processing to create a new instance. 각 인스턴스는 XAML을 구문 분석 하 고 로드할 때 기본 형식의 매개 변수가 없는 생성자를 호출 하 여 생성 됩니다.Each instance is created by calling the parameterless constructor of the underlying type when parsing and loading the XAML.

특성 구문 (속성)Attribute syntax (properties)

개체 속성은 개체 요소의 특성으로 표현되는 경우가 많습니다.Properties of an object can often be expressed as attributes of the object element. 특성 구문은 특성 구문에서 설정되는 속성의 이름을 지정하며 뒤에 할당 연산자(=)가 옵니다.An attribute syntax names the property that is being set in attribute syntax, followed by the assignment operator (=). 특성 값은 항상 따옴표 안에 포함된 문자열로 지정됩니다.The value of an attribute is always specified as a string that is contained within quotation marks.

특성 구문은 가장 효율적인 속성 설정 구문이며 과거에 태그 언어를 사용한 적이 있는 개발자에게 가장 직관적인 구문입니다.Attribute syntax is the most streamlined property setting syntax and is the most intuitive syntax to use for developers who have used markup languages in the past. 예를 들어, 다음 태그는 빨간색 텍스트와 파란색 배경이 있으며 Content로 지정된 표시 텍스트가 있는 단추를 만듭니다.For example, the following markup creates a button that has red text and a blue background in addition to display text specified as Content.

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

속성 요소 구문Property element syntax

개체 요소의 일부 속성의 경우에는 속성 값을 제공하기 위해 필요한 개체나 정보를 특성 구문의 문자열 제한에 맞춰 따옴표 안에 적절하게 표현할 수 없기 때문에 특성 구문을 사용할 수 없습니다.For some properties of an object element, attribute syntax is not possible, because the object or information necessary to provide the property value cannot be adequately expressed within the quotation mark and string restrictions of attribute syntax. 이러한 경우에는 속성 요소 구문이라고 하는 다른 구문을 사용할 수 있습니다.For these cases, a different syntax known as property element syntax can be used.

속성 요소 시작 태그의 구문은 <typeName.propertyName>입니다.The syntax for the property element start tag is <typeName.propertyName>. 일반적으로 해당 태그의 콘텐츠는 속성이 값으로 사용 하는 형식의 개체 요소입니다.Generally, the content of that tag is an object element of the type that the property takes as its value. 콘텐츠를 지정한 후 끝 태그를 사용 하 여 property 요소를 닫아야 합니다.After specifying the content, you must close the property element with an end tag. 끝 태그에 대한 구문은 </typeName.propertyName>입니다.The syntax for the end tag is </typeName.propertyName>.

특성 구문이 지원되는 경우에는 특성 구문을 사용하는 것이 일반적으로 편리하며 태그를 간결하게 만들 수 있지만 이것은 기술적으로 제한이 있다는 것을 의미하는 것이 아니라 대체로 스타일의 문제입니다.If an attribute syntax is possible, using the attribute syntax is typically more convenient and enables a more compact markup, but that is often just a matter of style, not a technical limitation. 다음 예제에서는 앞의 특성 구문 예제에서와 같이 동일한 속성을 설정하는 것을 보여 주지만 이번에는 Button의 모든 속성에 대해 속성 요소 구문을 사용합니다.The following example shows the same properties being set as in the previous attribute syntax example, but this time by using property element syntax for all properties of the 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>

컬렉션 구문Collection syntax

XAML 언어에는 보다 읽기 쉬운 태그를 생성하는 몇 가지 최적화 기능이 포함되어 있습니다.The XAML language includes some optimizations that produce more human-readable markup. 이러한 최적화 중 하나는 특정 속성이 컬렉션 형식을 사용하는 경우 태그에서 해당 속성 값 내에 자식 요소로 선언하는 항목이 컬렉션에 포함되는 것입니다.One such optimization is that if a particular property takes a collection type, then items that you declare in markup as child elements within that property's value become part of the collection. 이 경우 자식 개체 요소의 컬렉션이 컬렉션 속성에 설정되는 값입니다.In this case a collection of child object elements is the value being set to the collection property.

다음 예에서는 GradientStops 속성의 값을 설정 하기 위한 컬렉션 구문을 보여 줍니다.The following example shows collection syntax for setting values of the GradientStops property:

<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>  

XAML 콘텐츠 속성XAML content properties

XAML은 클래스에서 해당 속성 중 하나를 XAML 콘텐츠 속성으로 정확하게 지정할 수 있는 언어 기능을 지정합니다.XAML specifies a language feature whereby a class can designate exactly one of its properties to be the XAML content property. 개체 요소의 자식 요소가 해당 콘텐츠 속성의 값을 설정하는 데 사용됩니다.Child elements of that object element are used to set the value of that content property. 즉, 콘텐츠 속성이 고유한 경우에는 XAML 태그에서 해당 속성을 설정할 때 속성 요소를 생략하고 태그 내에 보다 가시적인 부모/자식 비유를 생성할 수 있습니다.In other words, for the content property uniquely, you can omit a property element when setting that property in XAML markup and produce a more visible parent/child metaphor in the markup.

예를 Border 들어는의 Child콘텐츠 속성을 지정 합니다.For example, Border specifies a content property of Child. 다음 두 Border 요소는 동일 하 게 처리 됩니다.The following two Border elements are treated identically. 첫 번째 요소는 콘텐츠 속성 구문을 이용하고 Border.Child 속성 요소를 생략합니다.The first one takes advantage of the content property syntax and omits the Border.Child property element. 두 번째 요소는 명시적으로 Border.Child를 표시합니다.The second one shows Border.Child explicitly.

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

XAML 언어의 규칙에 따라 XAML 콘텐츠 속성의 값은 해당 개체 요소의 다른 모든 속성 요소의 맨 앞 또는 맨 뒤에 지정해야 합니다.As a rule of the XAML language, the value of a XAML content property must be given either entirely before or entirely after any other property elements on that object element. 예를 들어, 다음 태그는 컴파일되지 않습니다.For instance, the following markup does not compile:

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

XAML 콘텐츠 속성의 이러한 제한 사항에 대한 자세한 내용은 XAML 구문 정보의 "XAML 콘텐츠 속성" 섹션을 참조하세요.For more information about this restriction on XAML content properties, see the "XAML Content Properties" section of XAML Syntax In Detail.

텍스트 내용Text content

일부 XAML 요소는 텍스트를 자신의 콘텐츠로 직접 처리할 수 있습니다.A small number of XAML elements can directly process text as their content. 이렇게 하려면 다음 경우 중 하나에 해당해야 합니다.To enable this, one of the following cases must be true:

  • 클래스는 콘텐츠 속성을 선언 해야 하며, 해당 콘텐츠 속성은 문자열에 할당할 수 있는 형식 이어야 합니다 (형식 Object).The class must declare a content property, and that content property must be of a type assignable to a string (the type could be Object). 예를 들어, ContentControlContent 콘텐츠 속성으로을 사용 하 고 형식은 Object이며,와 같이 Button실질적 ContentControl 으로 다음과 같은 <Button>Hello</Button>사용을 지원 합니다.For instance, any ContentControl uses Content as its content property and it is type Object, and this supports the following usage on a practical ContentControl such as a Button: <Button>Hello</Button>.

  • 형식에서 형식 변환기를 선언해야 합니다. 이 경우 텍스트 콘텐츠가 이 형식 변환기의 초기화 텍스트로 사용됩니다.The type must declare a type converter, in which case the text content is used as initialization text for that type converter. 예를 들어, <Brush>Blue</Brush>을 입력합니다.For example, <Brush>Blue</Brush>. 이러한 경우는 실제로 그다지 일반적이지 않습니다.This case is less common in practice.

  • 형식은 알려진 XAML 언어 기본 형식이어야 합니다.The type must be a known XAML language primitive.

콘텐츠 속성 및 컬렉션 구문 결합Content properties and collection syntax combined

다음 예제를 고려해 보세요.Consider this example:

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

여기서 각 Button 는의 StackPanel자식 요소입니다.Here, each Button is a child element of StackPanel. 이는 두 가지 서로 다른 이유로 두 태그를 생략하는 효율적이며 직관적인 태그입니다.This is a streamlined and intuitive markup that omits two tags for two different reasons.

  • StackPanel 속성 요소를 생략 했습니다. StackPanel 에서Panel파생 됩니다.Omitted StackPanel.Children property element: StackPanel derives from Panel. PanelPanel.Children 를 XAML 콘텐츠 속성으로 정의 합니다.Panel defines Panel.Children as its XAML content property.

  • 생략 i object 요소: 속성 Panel.Children 은을 UIElementCollection 구현IList하는 형식을 사용 합니다.Omitted UIElementCollection object element: The Panel.Children property takes the type UIElementCollection, which implements IList. IList같은 컬렉션을 처리 하기 위한 XAML 규칙에 따라 컬렉션의 요소 태그를 생략할 수 있습니다.The collection's element tag can be omitted, based on the XAML rules for processing collections such as IList. (이 경우 UIElementCollection 는 매개 변수가 없는 생성자를 노출 하지 않고 UIElementCollection 개체 요소가 주석으로 표시 된 이유 때문에 실제로 인스턴스화할 수 없습니다.)(In this case, UIElementCollection actually cannot be instantiated because it does not expose a parameterless constructor, and that is why the UIElementCollection object element is shown commented out).

<StackPanel>  
  <StackPanel.Children>  
    <!--<UIElementCollection>-->  
    <Button>First Button</Button>  
    <Button>Second Button</Button>  
    <!--</UIElementCollection>-->  
  </StackPanel.Children>  
</StackPanel>  

특성 구문 (이벤트)Attribute syntax (events)

속성이 아니라 이벤트인 멤버에 대해서도 특성 구문을 사용할 수 있습니다.Attribute syntax can also be used for members that are events rather than properties. 이 경우 특성 이름은 이벤트의 이름입니다.In this case, the attribute's name is the name of the event. XAML 이벤트에 대한 WPF 구현에서 특성 값은 해당 이벤트의 대리자를 구현하는 처리기의 이름입니다.In the WPF implementation of events for XAML, the attribute's value is the name of a handler that implements that event's delegate. 예를 들어, 다음 태그는 Click 이벤트 Button 에 대 한 처리기를 태그에 생성 된에 할당 합니다.For example, the following markup assigns a handler for the Click event to a Button created in markup:

<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="ExampleNamespace.ExamplePage">
  <Button Click="Button_Click" >Click Me!</Button>
</Page>

WPF의 XAML 및 이벤트에는 이 특성 구문 예제보다 훨씬 더 많은 기능이 있습니다.There is more to events and XAML in WPF than just this example of the attribute syntax. 예를 들어, 여기서 참조된 ClickHandler가 무엇을 나타내며 어떻게 정의되는지가 궁금할 수 있습니다.For example, you might wonder what the ClickHandler referenced here represents and how it is defined. 이 내용에 대해서는 이 항목의 뒷부분에 있는 이벤트 및 XAML 코드 숨김 섹션에서 설명합니다.This will be explained in the upcoming Events and XAML Code-Behind section of this topic.

XAML의 대/소문자 및 공백Case and white space in XAML

XAML은 일반적으로 대/소문자를 구분합니다.XAML is generally speaking case sensitive. 지원 형식을 확인하기 위해 WPF XAML은 CLR에서 대/소문자를 구분하는 규칙에 따라 대/소문자를 구분합니다.For purposes of resolving backing types, WPF XAML is case sensitive by the same rules that the CLR is case sensitive. 개체 요소, 속성 요소 및 특성 이름은 모두 어셈블리의 기본 형식 또는 형식 멤버의 이름과 비교해 대/소문자를 사용하여 지정해야 합니다.Object elements, property elements, and attribute names must all be specified by using the sensitive casing when compared by name to the underlying type in the assembly, or to a member of a type. XAML 언어 키워드 및 기본 형식 또한 대/소문자를 구분합니다.XAML language keywords and primitives are also case sensitive. 그러나 값은 대/소문자를 항상 구분하지는 않습니다.Values are not always case sensitive. 값의 대/소문자 구분은 값 또는 속성 값 형식을 사용하는 속성과 연결된 형식 변환기의 동작에 따라 다릅니다.Case sensitivity for values will depend on the type converter behavior associated with the property that takes the value, or the property value type. 예를 들어 Boolean 형식을 사용 하는 속성은 true 또는 TrueBoolean 동일한 값으로 사용할 수 있지만, 문자열에 대 한 네이티브 WPF XAML 파서 형식 변환이 이미 이러한 항목을 동등한 것으로 허용 하기 때문입니다.For example, properties that take the Boolean type can take either true or True as equivalent values, but only because the native WPF XAML parser type conversion for string to Boolean already permits these as equivalents.

WPF XAML 프로세서 및 serializer는 중요 하지 않은 모든 공백을 무시 하거나 삭제 하며 모든 유효 공백을 정규화 합니다.WPF XAML processors and serializers will ignore or drop all nonsignificant white space, and will normalize any significant white space. 이는 XAML 사양의 기본 공백 동작 권장 사항과 일치 합니다.This is consistent with the default white-space behavior recommendations of the XAML specification. 이 동작은 일반적으로 XAML 콘텐츠 속성 안에서 문자열을 지정할 때만 영향을 줍니다.This behavior is generally only of consequence when you specify strings within XAML content properties. 간단히 말해 XAML은 공백, 줄 바꿈 및 탭 문자가 연속되는 문자열의 끝에 있는 경우 이를 공백으로 변환한 다음 하나의 공백을 유지합니다.In simplest terms, XAML converts space, linefeed and tab characters into spaces, and then preserves one space if found at either end of a contiguous string. XAML 공백 처리에 대 한 전체 설명은이 항목에서 다루지 않습니다.The full explanation of XAML white-space handling is not covered in this topic. 자세한 내용은 XAML의 공백 처리를 참조 하세요.For details, see White space processing in XAML.

태그 확장Markup extensions

태그 확장은 XAML 언어 개념입니다.Markup extensions are a XAML language concept. 특성 구문의 값을 제공하기 위해 사용할 때 중괄호({})는 태그 확장 사용을 나타냅니다.When used to provide the value of an attribute syntax, curly braces ({ and }) indicate a markup extension usage. 이 사용에서는 특성 값의 일반적인 처리를 리터럴 문자열이나 문자열 변환 가능 값으로 이스케이프하도록 XAML에 지시합니다.This usage directs the XAML processing to escape from the general treatment of attribute values as either a literal string or a string-convertible value.

WPFWPF 애플리케이션 프로그래밍에 가장 많이 사용되는 태그 확장은 데이터 바인딩 식에 사용되는 바인딩과 리소스 참조 StaticResourceDynamicResource입니다.The most common markup extensions used in WPFWPF application programming are Binding, used for data binding expressions, and the resource references StaticResource and DynamicResource. 태그 확장을 사용하면 일반적으로 속성이 특성 구문을 지원하지 않더라도 특성 구문을 사용하여 속성 값을 제공할 수 있으며,By using markup extensions, you can use attribute syntax to provide values for properties even if that property does not support an attribute syntax in general. 중간 식 형식을 사용하여 값 지연이나 런타임에만 존재하는 다른 개체 참조와 같은 기능을 활성화할 수 있습니다.Markup extensions often use intermediate expression types to enable features such as deferring values or referencing other objects that are only present at run time.

예를 들어, 다음 태그는 특성 구문을 사용 하 Style 여 속성의 값을 설정 합니다.For example, the following markup sets the value of the Style property using attribute syntax. 속성 StyleStyle 클래스의 인스턴스를 사용 하며, 기본적으로 특성 구문 문자열에 의해 인스턴스화될 수 없습니다.The Style property takes an instance of the Style class, which by default could not be instantiated by an attribute syntax string. 하지만 이 경우 특성은 특정 태그 확장인 StaticResource를 참조합니다.But in this case, the attribute references a particular markup extension, StaticResource. 해당 태그 확장이 처리되면 이전에 리소스 사전에서 키가 지정된 리소스로 인스턴스화된 스타일에 대한 참조를 반환합니다.When that markup extension is processed, it returns a reference to a style that was previously instantiated as a keyed resource in a resource dictionary.

<Page.Resources>
  <SolidColorBrush x:Key="MyBrush" Color="Gold"/>
  <Style TargetType="Border" x:Key="PageBackground">
    <Setter Property="Background" Value="Blue"/>
  </Style>
</Page.Resources>
<StackPanel>
  <Border Style="{StaticResource PageBackground}">
  </Border>
</StackPanel>

WPF에 구체적으로 구현된 XAML에 대한 모든 태그 확장의 참조 목록을 보려면 WPF XAML 확장을 참조하세요.For a reference listing of all markup extensions for XAML implemented specifically in WPF, see WPF XAML Extensions. System.xaml에 정의 되 고 .NET Framework xaml 구현에 보다 광범위 하 게 사용할 수 있는 태그 확장의 참조 목록은 xaml 네임 스페이스 (x :)를 참조 하세요. 언어 기능.For a reference listing of the markup extensions that are defined by System.Xaml and are more widely available for .NET Framework XAML implementations, see XAML Namespace (x:) Language Features. 태그 확장 개념에 대한 자세한 내용은 태그 확장 및 WPF XAML을 참조하세요.For more information about markup extension concepts, see Markup Extensions and WPF XAML.

형식 변환기Type converters

XAML 구문 개요 섹션에서는 문자열로 특성 값을 설정할 수 있어야 한다고 설명했습니다.In the XAML Syntax in Brief section, it was stated that the attribute value must be able to be set by a string. 문자열이 다른 개체 형식 또는 기본 값으로 변환 되는 방식에 대 한 기본적인 기본 처리는 또는 String UriDateTime 같은 특정 형식에 대 한 기본 처리 외에도 형식 자체를 기반으로 합니다.The basic, native handling of how strings are converted into other object types or primitive values is based on the String type itself, in addition to native processing for certain types such as DateTime or Uri. 그러나 대부분의 WPFWPF 형식 또는 이러한 형식의 멤버는 더 복잡한 개체 형식의 인스턴스를 문자열과 특성으로 지정할 수 있도록 기본 문자열 특성 처리 동작을 확장합니다.But many WPFWPF types or members of those types extend the basic string attribute processing behavior, in such a way that instances of more complex object types can be specified as strings and attributes.

Thickness 구조체는 XAML 용도에 대해 형식 변환을 사용 하도록 설정 된 형식의 예제입니다.The Thickness structure is an example of a type that has a type conversion enabled for XAML usages. Thickness중첩 된 사각형 내의 측정치를 나타내며와 Margin같은 속성의 값으로 사용 됩니다.Thickness indicates measurements within a nested rectangle and is used as the value for properties such as Margin. Thickness형식 변환기를 배치 하 여를 Thickness 사용 하는 모든 속성은 특성으로 지정할 수 있기 때문에 XAML에서 더 쉽게 지정할 수 있습니다.By placing a type converter on Thickness, all properties that use a Thickness are easier to specify in XAML because they can be specified as attributes. 다음 예제에서는 형식 변환과 특성 구문을 사용 하 여에 대 한 Margin값을 제공 합니다.The following example uses a type conversion and attribute syntax to provide a value for a Margin:

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

이전 특성 구문 예제는 다음과 같은 보다 자세한 구문 예제와 동일 합니다. 여기서 Margin 은 개체 요소를 Thickness 포함 하는 속성 요소 구문을 통해 설정 됩니다.The previous attribute syntax example is equivalent to the following more verbose syntax example, where the Margin is instead set through property element syntax containing a Thickness object element. Thickness 네 가지 주요 속성은 새 인스턴스의 특성으로 설정 됩니다.The four key properties of Thickness are set as attributes on the new instance:

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

참고

또한 형식 자체에 매개 변수가 없는 생성자가 없기 때문에 형식 변환이 하위 클래스를 포함 하지 않고 속성을 해당 형식으로 설정 하는 유일한 public 방법인 제한 된 수의 개체가 있습니다.There are also a limited number of objects where the type conversion is the only public way to set a property to that type without involving a subclass, because the type itself does not have a parameterless constructor. 예제입니다. CursorAn example is Cursor.

형식 변환 및 특성 구문에 대한 사용이 지원되는 방법에 대한 자세한 내용은 TypeConverters 및 XAML을 참조하세요.For more information on how type conversion and its use for attribute syntax is supported, see TypeConverters and XAML.

XAML 루트 요소 및 XAML 네임 스페이스XAML root elements and XAML namespaces

XAML 파일에는 하나의 루트 요소만 있어야 올바른 형식의 XMLXML 파일이자 유효한 XAML 파일이 될 수 있습니다.A XAML file must have only one root element, in order to be both a well-formed XMLXML file and a valid XAML file. 일반적인 wpf 시나리오의 경우 wpf 응용 프로그램 모델에서 중요 한 의미를 갖는 루트 요소를 사용 Window 합니다 (예: Page 페이지, ResourceDictionary 외부 사전 또는 Application 응용 프로그램 정의의 경우).For typical WPF scenarios, you use a root element that has a prominent meaning in the WPF application model (for example, Window or Page for a page, ResourceDictionary for an external dictionary, or Application for the application definition). 다음 예제에서는의 WPFWPF Page루트 요소를 사용 하 여 페이지에 대 한 일반적인 XAML 파일의 루트 요소를 보여 줍니다.The following example shows the root element of a typical XAML file for a WPFWPF page, with the root element of Page.

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

루트 요소에는 xmlnsxmlns:x 특성도 포함됩니다.The root element also contains the attributes xmlns and xmlns:x. 이러한 특성은 태그가 요소로 참조할 요소의 지원 형식에 대한 형식 정의가 포함된 XAML 네임스페이스를 XAML 프로세서에 나타냅니다.These attributes indicate to a XAML processor which XAML namespaces contain the type definitions for backing types that the markup will reference as elements. xmlns 특성은 특히 기본 XAML 네임스페이스를 나타냅니다.The xmlns attribute specifically indicates the default XAML namespace. 기본 XAML 네임스페이스 안에서는 태그의 개체 요소를 접두사 없이 지정할 수 있습니다.Within the default XAML namespace, object elements in the markup can be specified without a prefix. 대부분의 WPFWPF 애플리케이션 시나리오 및 SDKSDKWPFWPF 섹션에 나오는 거의 모든 예제의 경우 기본 XAML 네임스페이스는 WPFWPF 네임스페이스 http://schemas.microsoft.com/winfx/2006/xaml/presentation에 매핑됩니다.For most WPFWPF application scenarios, and for almost all of the examples given in the WPFWPF sections of the SDKSDK, the default XAML namespace is mapped to the WPFWPF namespace http://schemas.microsoft.com/winfx/2006/xaml/presentation. xmlns:x 특성은 XAML 언어 네임스페이스http://schemas.microsoft.com/winfx/2006/xaml를 매핑하는 추가적인 XAML 네임스페이스를 나타냅니다.The xmlns:x attribute indicates an additional XAML namespace, which maps the XAML language namespace http://schemas.microsoft.com/winfx/2006/xaml.

xmlns를 사용하여 이름 범위의 사용 및 매핑 범위를 정의하는 방식은 XML 1.0 사양과 일치합니다.This usage of xmlns to define a scope for usage and mapping of a namescope is consistent with the XML 1.0 specification. XAML 이름 범위는 형식 확인 및 XAML 구문 분석에 적용할 경우 형식이 이름 범위의 요소를 지원하는 방법도 암시한다는 점에서 XML 이름 범위와는 다릅니다.XAML namescopes are different from XML namescopes only in that a XAML namescope also implies something about how the namescope's elements are backed by types when it comes to type resolution and parsing the XAML.

xmlns특성은 각 XAML 파일의 루트 요소에서만 엄격하게 필요합니다.Note that the xmlns attributes are only strictly necessary on the root element of each XAML file. xmlns 정의는 루트 요소의 모든 하위 요소에 적용됩니다(이 동작은 xmlns에 대한 XML 1.0 사양과 일치함). xmlns 특성은 루트 아래의 다른 요소에서도 허용되며, 정의 요소의 모든 하위 요소에 적용됩니다.xmlns definitions will apply to all descendant elements of the root element (this behavior is again consistent with the XML 1.0 specification for xmlns.) xmlns attributes are also permitted on other elements underneath the root, and would apply to any descendant elements of the defining element. 그러나 XAML 네임스페이스를 자주 정의하거나 재정의할 경우 XAML 태그 스타일을 읽기 어렵게 될 수 있습니다.However, frequent definition or redefinition of XAML namespaces can result in a XAML markup style that is difficult to read.

XAML 프로세서의 WPFWPF 구현에는 WPF 핵심 어셈블리를 인식하는 인프라가 포함되어 있습니다.The WPFWPF implementation of its XAML processor includes an infrastructure that has awareness of the WPF core assemblies. WPFWPF 핵심 어셈블리는 기본 XAML 네임스페이스로의 WPFWPF 매핑을 지원하는 형식을 포함한다고 알려져 있습니다.The WPFWPF core assemblies are known to contain the types that support the WPFWPF mappings to the default XAML namespace. 이 어셈블리는 프로젝트 빌드 파일과 WPF 빌드 및 프로젝트 시스템에 속하는 구성을 통해 사용할 수 있습니다.This is enabled through configuration that is part of your project build file and the WPF build and project systems. 따라서 WPFWPF 어셈블리에서 제공된 XAML 요소를 참조하려는 경우 기본 XAML 네임스페이스를 기본 xmlns로 선언하기만 하면 됩니다.Therefore, declaring the default XAML namespace as the default xmlns is all that is necessary in order to reference XAML elements that come from WPFWPF assemblies.

X: 접두사The x: prefix

앞의 루트 요소 예제에서는 접두사 x:를 사용하여 XAML 언어 구문을 지원하는 전용 XAML 네임스페이스인 XAML 네임스페이스 http://schemas.microsoft.com/winfx/2006/xaml를 매핑했습니다.In the previous root element example, the prefix x: was used to map the XAML namespace http://schemas.microsoft.com/winfx/2006/xaml, which is the dedicated XAML namespace that supports XAML language constructs. x: 접두사는 이 SDKSDK 전체의 설명서, 예제 및 프로젝트 템플릿에서 이 XAML 네임스페이스를 매핑하는 데 사용됩니다.This x: prefix is used for mapping this XAML namespace in the templates for projects, in examples, and in documentation throughout this SDKSDK. Xaml 언어의 XAML 네임 스페이스에는 XAML에서 자주 사용 되는 여러 프로그래밍 구문이 포함 되어 있습니다.The XAML namespace for the XAML language contains several programming constructs that you will use very frequently in your XAML. 다음은 가장 많이 사용하게 될 x: 접두사 네임스페이스 프로그래밍 구문의 목록입니다.The following is a listing of the most common x: prefix programming constructs you will use:

  • x:Key: 의 ResourceDictionary 각 리소스에 대 한 고유 키를 설정 하거나 다른 프레임 워크의 비슷한 사전 개념을 설정 합니다.x:Key: Sets a unique key for each resource in a ResourceDictionary (or similar dictionary concepts in other frameworks). x:Key는 일반적인 WPF 응용 프로그램 태그에서 보게 될 x: 사용의 90%를 차지할 것입니다.x:Key will probably account for 90% of the x: usages you will see in a typical WPF application's markup.

  • x:Class: XAML 페이지에 대 한 코드를 제공 하는 클래스의 CLR 네임 스페이스와 클래스 이름을 지정 합니다.x:Class: Specifies the CLR namespace and class name for the class that provides code-behind for a XAML page. 이러한 클래스가 WPF 프로그래밍 모델에 대해 코드 숨김을 지원하도록 해야 하므로 리소스가 없는 경우에도 x:가 매핑된 것을 자주 보게 됩니다.You must have such a class to support code-behind per the WPF programming model, and therefore you almost always see x: mapped, even if there are no resources.

  • x:Name: 개체 요소가 처리 된 후 런타임 코드에 존재 하는 인스턴스에 대 한 런타임 개체 이름을 지정 합니다.x:Name: Specifies a run-time object name for the instance that exists in run-time code after an object element is processed. 일반적으로는 x:Name에 대응하여 WPF에 정의된 속성을 자주 사용하게 됩니다.In general, you will frequently use a WPF-defined equivalent property for x:Name. 이러한 속성은 특히 CLR 지원 속성에 매핑되므로 초기화된 XAML에서 명명된 요소를 찾기 위해 런타임 코드를 자주 사용하는 애플리케이션 작성에 보다 편리합니다.Such properties map specifically to a CLR backing property and are thus more convenient for application programming, where you frequently use run time code to find the named elements from initialized XAML. 가장 일반적인 속성 FrameworkElement.Name은입니다.The most common such property is FrameworkElement.Name. 해당 하는 WPF 프레임 워크 수준 Name 속성이 특정 형식에서 지원 되지 않는 경우에는 x:Name을 계속 사용할 수 있습니다.You might still use x:Name when the equivalent WPF framework-level Name property is not supported in a particular type. 이는 특정 애니메이션 시나리오에서 볼 수 있는 상황입니다.This occurs in certain animation scenarios.

  • x:Static: 다른 경우에는 XAML 호환 속성이 아닌 정적 값을 반환 하는 참조를 사용 하도록 설정 합니다.x:Static: Enables a reference that returns a static value that is not otherwise a XAML-compatible property.

  • x:Type: 형식 이름을 Type 기반으로 참조를 생성 합니다.x:Type: Constructs a Type reference based on a type name. 이는 x:Type 태그 확장 사용이 선택 Type사항인 것과 Style.TargetType같은 방식으로 속성에Type 네이티브 문자열 변환이 있는 경우를 비롯 하 여에서 사용 하는 특성을 지정 하는 데 사용 됩니다.This is used to specify attributes that take Type, such as Style.TargetType, although frequently the property has native string-to-Type conversion in such a way that the x:Type markup extension usage is optional.

x: 접두사/XAML 네임스페이스에는 일반적으로는 사용되지 않는 추가적인 프로그래밍 구문이 있습니다.There are additional programming constructs in the x: prefix/XAML namespace, which are not as common. 자세한 내용은 XAML 네임 스페이스 (x:)를 참조 하세요. 언어 기능.For details, see XAML Namespace (x:) Language Features.

XAML의 사용자 지정 접두사 및 사용자 지정 형식Custom prefixes and custom types in XAML

사용자 지정 어셈블리 또는 PresentationCore, PresentationFramework 및 WindowsBase의 WPF 핵심 이외의 어셈블리에 대해 사용자 지정 xmlns 매핑의 일부로 어셈블리를 지정할 수 있습니다.For your own custom assemblies, or for assemblies outside the WPF core of PresentationCore, PresentationFramework and WindowsBase, you can specify the assembly as part of a custom xmlns mapping. 현재 시도 중인 XAML 사용을 지원하도록 해당 형식이 제대로 구현되어 있으면 XAML에서 해당 어셈블리의 형식을 참조할 수 있습니다.You can then reference types from that assembly in your XAML, so long as that type is correctly implemented to support the XAML usages you are attempting.

다음은 사용자 지정 접두사가 XAML 태그에서 작동하는 방식을 보여 주는 기본 예제입니다.The following is a very basic example of how custom prefixes work in XAML markup. 접두사 custom은 루트 요소 태그에 정의되고, 애플리케이션과 함께 패키지되고 사용 가능한 특정 어셈블리에 매핑됩니다.The prefix custom is defined in the root element tag, and mapped to a specific assembly that is packaged and available with the application. 이 어셈블리에는 일반적인 XAML 사용뿐 아니라 WPF XAML 콘텐츠 모델의 이 특정 시점에 삽입될 수 있는 클래스 상속 사용을 지원하도록 구현된 NumericUpDown 형식이 들어 있습니다.This assembly contains a type NumericUpDown, which is implemented to support general XAML usage as well as using a class inheritance that permits its insertion at this particular point in a WPF XAML content model. NumericUpDown 컨트롤 인스턴스는 접두사를 사용하여 개체 요소로 선언되므로 XAML 파서에서 형식이 포함된 XAML 네임스페이스 및 형식 정의가 들어 있는 지원 어셈블리가 있는 위치를 알 수 있습니다.An instance of this NumericUpDown control is declared as an object element, using the prefix so that a XAML parser knows which XAML namespace contains the type, and therefore where the backing assembly is that contains the type definition.

<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>  

XAML의 사용자 지정 형식에 대한 자세한 내용은 WPF에 대한 XAML 및 사용자 지정 클래스를 참조하세요.For more information about custom types in XAML, see XAML and Custom Classes for WPF.

XML 네임스페이스와 어셈블리 백업 코드의 네임스페이스가 어떻게 관련되는지에 대한 자세한 내용은 WPF XAML을 위한 XAML 네임스페이스 및 네임스페이스 매핑을 참조하세요.For more information about how XML namespaces and the namespaces of the backing code in assemblies are related, see XAML Namespaces and Namespace Mapping for WPF XAML.

이벤트 및 XAML 코드-숨겨진Events and XAML code-behind

대부분의 WPFWPF 애플리케이션은 XAML 태그와 코드 숨김으로 구성됩니다.Most WPFWPF applications consist of both XAML markup and code-behind. 프로젝트 내에서 XAML은 .xaml 파일로 작성 되며, Microsoft Visual Basic C# 와 같은 CLR 언어를 사용 하 여 코드를 작성 하는 파일을 작성 합니다.Within a project, the XAML is written as a .xaml file, and a CLR language such as Microsoft Visual Basic or C# is used to write a code-behind file. XAML 파일이 WPF 프로그래밍 및 애플리케이션 모델의 일부로 태그 컴파일될 때 XAML 파일에 대한 XAML 코드 숨김 파일의 위치는 네임스페이스와 클래스를 XAML 루트 요소의 x:Class 특성으로 지정하여 식별합니다.When a XAML file is markup compiled as part of the WPF programming and application models, the location of the XAML code-behind file for a XAML file is identified by specifying a namespace and class as the x:Class attribute of the root element of the XAML.

지금까지의 예제에서 몇 개의 단추를 살펴보았지만 아직 논리적 동작이 연결된 단추는 없었습니다.In the examples so far, you have seen several buttons, but none of these buttons had any logical behavior associated with them yet. 개체 요소에 대한 동작을 추가하는 기본 애플리케이션 수준 메커니즘은, 요소 클래스의 기존 이벤트를 사용하고 런타임에서 해당 이벤트가 발생할 때 호출되는 해당 이벤트에 대한 특정 처리기를 작성하는 것입니다.The primary application-level mechanism for adding a behavior for an object element is to use an existing event of the element class, and to write a specific handler for that event that is invoked when that event is raised at run time. 사용할 이벤트 이름과 처리기 이름은 태그에서 지정하고 처리기를 구현하는 코드는 코드 숨김에서 정의합니다.The event name and the name of the handler to use are specified in the markup, whereas the code that implements your handler is defined in the code-behind.

<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="ExampleNamespace.ExamplePage">
  <Button Click="Button_Click" >Click Me!</Button>
</Page>
namespace ExampleNamespace
{
  public partial class ExamplePage
  {
    void Button_Click(object sender, RoutedEventArgs e)
    {
      Button b = e.Source as Button;
      b.Foreground = Brushes.Red;
    }
  }
}
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    Dim b As Button = e.Source
    b.Foreground = Brushes.Red
End Sub

코드 숨김 파일은 CLR 네임스페이스 ExampleNamespace를 사용하며 ExamplePage를 해당 네임스페이스 안에서 partial 클래스로 선언합니다.Notice that the code-behind file uses the CLR namespace ExampleNamespace and declares ExamplePage as a partial class within that namespace. 이는 태그 루트에 제공되는 ExampleNamespace.ExamplePagex:Class 특성 값과This parallels the x:Class attribute value of ExampleNamespace.ExamplePage 유사합니다.that was provided in the markup root. WPF 태그 컴파일러는 루트 요소 형식에서 클래스를 파생하여 모든 컴파일된 XAML 파일에 대한 partial 클래스를 만듭니다.The WPF markup compiler will create a partial class for any compiled XAML file, by deriving a class from the root element type. 같은 partial 클래스를 정의하는 코드 숨김을 제공하는 경우, 결과 코드는 컴파일된 애플리케이션의 동일한 네임스페이스와 클래스 안에서 결합됩니다.When you provide code-behind that also defines the same partial class, the resulting code is combined within the same namespace and class of the compiled application.

WPF에서의 코드 숨김 프로그래밍 요구 사항에 대한 자세한 내용은 WPF의 코드 숨김 및 XAML의 "코드 숨김, 이벤트 처리기 및 partial 클래스 요구 사항" 섹션을 참조하세요.For more information about requirements for code-behind programming in WPF, see the "Code-behind, Event Handler, and Partial Class Requirements" section of Code-Behind and XAML in WPF.

별도의 코드 숨김 파일을 만들지 않으려면 코드를 XAML 파일 안에 인라인으로 넣을 수도 있습니다.If you do not want to create a separate code-behind file, you can also inline your code in a XAML file. 하지만 인라인 코드는 제한이 많은 기술입니다.However, inline code is a less versatile technique that has substantial limitations. 자세한 내용은 WPF의 코드 숨김 및 XAML을 참조하세요.For details, see Code-Behind and XAML in WPF.

라우트된 이벤트Routed events

WPFWPF에 기본이 되는 라우트된 이벤트라는 기능이 있습니다.A particular event feature that is fundamental to WPFWPF is a routed event. 라우트된 이벤트를 사용하면 요소가 다른 요소에 의해 발생한 이벤트를 처리할 수 있습니다. 단, 요소들이 트리 관계를 통해 연결되어 있어야 합니다.Routed events enable an element to handle an event that was raised by a different element, as long as the elements are connected through a tree relationship. XAML 특성을 사용하여 이벤트 처리를 지정할 때 라우트된 이벤트는 클래스 멤버 테이블에서 해당 이벤트를 나열하지 않는 요소를 포함하여 모든 요소에서 수신되고 처리될 수 있습니다.When specifying event handling with a XAML attribute, the routed event can be listened for and handled on any element, including elements that do not list that particular event in the class members table. 이렇게 하려면 소유 클래스 이름으로 이벤트 이름 특성을 정규화합니다.This is accomplished by qualifying the event name attribute with the owning class name. 예를 들어, 진행 StackPanel 중인 StackPanel / Button 예제의Click 부모는의 특성 Button.Click StackPanel 을 지정 하 여 자식 요소 단추의 이벤트에 대 한 처리기를 등록할 수 있습니다. 특성 값으로 처리기 이름을 사용 하는 개체 요소입니다.For instance, the parent StackPanel in the ongoing StackPanel / Button example could register a handler for the child element button's Click event by specifying the attribute Button.Click on the StackPanel object element, with your handler name as the attribute value. 라우트된 이벤트의 작동 방식에 대한 자세한 내용은 라우트된 이벤트 개요를 참조하세요.For more information about how routed events work, see Routed Events Overview.

XAML 명명 된 요소XAML named elements

기본적으로 XAML 개체 요소 처리를 통해 개체 그래프에서 만들어진 개체 인스턴스는 고유한 식별자 또는 개체 참조를 가지지 않습니다.By default, the object instance that is created in an object graph by processing a XAML object element does not possess a unique identifier or object reference. 이와 달리 코드에서 생성자를 호출할 때는 나중에 코드에서 인스턴스를 참조할 수 있도록 대개는 생성자 결과를 사용하여 변수를 생성된 인스턴스로 설정합니다.In contrast, if you call a constructor in code, you almost always use the constructor result to set a variable to the constructed instance, so that you can reference the instance later in your code. 태그 정의를 통해 만들어진 개체에 대한 표준화된 액세스를 제공하기 위해 XAML은 x:Name 특성을 정의합니다.In order to provide standardized access to objects that were created through a markup definition, XAML defines the x:Name attribute. 모든 개체 요소에 대해 x:Name 특성의 값을 설정할 수 있습니다.You can set the value of the x:Name attribute on any object element. 코드 숨김에서 선택한 식별자는 구성된 인스턴스를 참조하는 인스턴스 변수와 같습니다.In your code-behind, the identifier you choose is equivalent to an instance variable that refers to the constructed instance. 명명된 요소는 모든 측면에서 개체 인스턴스인 것처럼 작동하며(이름은 해당 인스턴스를 참조함) 코드 숨김은 명명된 요소를 참조하여 애플리케이션 안에서 런타임 상호 작용을 처리할 수 있습니다.In all respects, named elements function as if they were object instances (the name references that instance), and your code-behind can reference the named elements to handle run-time interactions within the application. 인스턴스와 변수 간의 이러한 연결은 WPF XAML 태그 컴파일러에 의해 수행 되며,이 항목에서 자세히 설명 하지 않는와 InitializeComponent 같은 기능 및 패턴을 구체적으로 포함 합니다.This connection between instances and variables is accomplished by the WPF XAML markup compiler, and more specifically involve features and patterns such as InitializeComponent that will not be discussed in detail in this topic.

WPF 프레임 워크 수준 xaml 요소는 Name 속성을 상속 하며,이는 XAML 정의 x:Name 된 특성과 동일 합니다.WPF framework-level XAML elements inherit a Name property, which is equivalent to the XAML defined x:Name attribute. 다른 특정 클래스에서도 x:Name에 해당하는 속성 수준 속성을 제공하며 이것은 일반적으로 Name 속성으로도 정의됩니다.Certain other classes also provide property-level equivalents for x:Name, which is also generally defined as a Name property. 일반적으로, 멤버 테이블에서 선택한 요소/형식의 Name 속성을 찾을 수 없는 경우 x:Name을 대신 사용합니다.Generally speaking, if you cannot find a Name property in the members table for your chosen element/type, use x:Name instead. x:Name 은 특정 하위 시스템이 나와 FindName같은 유틸리티 메서드를 사용 하 여 런타임에 사용할 수 있는 XAML 요소에 대 한 식별자를 제공 합니다.The x:Name values will provide an identifier to a XAML element that can be used at run time, either by specific subsystems or by utility methods such as FindName.

다음 예제에서는 StackPanel 요소 Name 에 대해를 설정 합니다.The following example sets Name on a StackPanel element. 그런 다음에 의해 Button StackPanel buttonContainer StackPanel 설정Name된 대로 인스턴스 참조를 통해를 참조 하는 내의에 대 한 처리기입니다.Then, a handler on a Button within that StackPanel references the StackPanel through its instance reference buttonContainer as set by Name.

<StackPanel Name="buttonContainer">
  <Button Click="RemoveThis">Click to remove this button</Button>
</StackPanel>
void RemoveThis(object sender, RoutedEventArgs e)
{
    FrameworkElement fe = e.Source as FrameworkElement;
    if (buttonContainer.Children.Contains(fe))
    {
        buttonContainer.Children.Remove(fe);
    }
}
 Private Sub RemoveThis(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
     Dim fe As FrameworkElement = e.Source
     If (buttonContainer.Children.Contains(fe)) Then
         buttonContainer.Children.Remove(fe)
     End If
End Sub

변수와 마찬가지로 인스턴스의 XAML 이름도 범위라는 개념으로 제어됩니다. 즉, 예측 가능한 특정 범위 내에서 이름이 고유해야 합니다.Just like a variable, the XAML name for an instance is governed by a concept of scope, so that names can be enforced to be unique within a certain scope that is predictable. 페이지를 정의하는 기본 태그는 해당 페이지의 루트 요소인 XAML 이름 범위 경계를 사용하여 하나의 고유한 XAML 이름 범위를 지정합니다.The primary markup that defines a page denotes one unique XAML namescope, with the XAML namescope boundary being the root element of that page. 하지만 다른 태그 소스는 런타임에 스타일 안의 템플릿 또는 스타일과 같은 페이지와 상호 작용할 수 있으며, 이러한 태그 소스에는 페이지의 XAML 이름 범위와 연결되지 않아도 되는 자체 XAML 이름 범위가 있는 경우가 많습니다.However, other markup sources can interact with a page at run time, such as styles or templates within styles, and such markup sources often have their own XAML namescopes that do not necessarily connect with the XAML namescope of the page. 및 XAML 이름 범위 x:Name 에 대 한 자세한 내용은 Name, x:Name 지시문또는 WPF XAML 이름 범위를 참조 하세요.For more information on x:Name and XAML namescopes, see Name, x:Name Directive, or WPF XAML Namescopes.

연결 된 속성 및 연결 된 이벤트Attached properties and attached events

XAML에서는 속성이나 이벤트가 설정되는 요소의 형식 정의에 존재하는지 여부에 관계없이 임의의 요소에 특정 속성이나 이벤트를 지정할 수 있도록 하는 언어 기능을 지정합니다.XAML specifies a language feature that enables certain properties or events to be specified on any element, regardless of whether the property or event exists in the type's definitions for the element it is being set on. 이 기능의 속성 버전을 연결된 속성이라고 하고 이벤트 버전을 연결된 이벤트라고 합니다.The properties version of this feature is called an attached property, the events version is called an attached event. 개념적으로 볼 때 연결된 속성과 연결된 이벤트는 모든 XAML 요소/개체 인스턴스에 설정할 수 있는 전역 멤버로 생각할 수 있습니다.Conceptually, you can think of attached properties and attached events as global members that can be set on any XAML element/object instance. 그러나 해당 요소/클래스 또는 보다 큰 인프라는 연결된 값에 대해 지원 속성 저장소를 지원해야 합니다.However, that element/class or a larger infrastructure must support a backing property store for the attached values.

XAML의 연결된 속성은 일반적으로 특성 구문을 통해 사용합니다.Attached properties in XAML are typically used through attribute syntax. 특성 구문에서는 연결된 속성을 ownerType.propertyName 형식으로 지정합니다.In attribute syntax, you specify an attached property in the form ownerType.propertyName.

이는 속성 요소 사용과 비슷해 보이지만 이 경우 지정하는 ownerType은 연결된 속성이 설정되는 개체 요소와 형식이 항상 다릅니다.Superficially, this resembles a property element usage, but in this case the ownerType you specify is always a different type than the object element where the attached property is being set. ownerType은 연결된 속성 값을 가져오거나 설정하기 위해 XAML 프로세서에 필요한 접근자 메서드를 제공하는 형식입니다.ownerType is the type that provides the accessor methods that are required by a XAML processor in order to get or set the attached property value.

연결된 속성에 대한 가장 일반적인 시나리오는 자식 요소가 부모 요소에 속성 값을 보고하도록 하는 것입니다.The most common scenario for attached properties is to enable child elements to report a property value to their parent element.

다음 예에서는 연결 된 DockPanel.Dock 속성을 보여 줍니다.The following example illustrates the DockPanel.Dock attached property. 클래스 DockPanel 는에 대 한 DockPanel.Dock 접근자를 정의 하므로 연결 된 속성을 소유 합니다.The DockPanel class defines the accessors for DockPanel.Dock and therefore owns the attached property. 또한 DockPanel 클래스에는 자식 요소를 반복 하 고 각 요소에서의 DockPanel.Dock설정 된 값을 확인 하는 논리가 포함 되어 있습니다.The DockPanel class also includes logic that iterates its child elements and specifically checks each element for a set value of DockPanel.Dock. 값이 발견되면 레이아웃 도중 이 값을 사용하여 자식 요소를 배치합니다.If a value is found, that value is used during layout to position the child elements. 연결 된 속성을 사용 하 고이 위치 지정 기능을 사용 하는 것은 DockPanel 실제로 클래스에 대 한 동기 시나리오입니다. DockPanel.DockUse of the DockPanel.Dock attached property and this positioning capability is in fact the motivating scenario for the DockPanel class.

<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>

WPFWPF에서 모든 연결된 속성은 거의 또는 모두 종속성 속성으로도 구현됩니다.In WPFWPF, most or all the attached properties are also implemented as dependency properties. 자세한 내용은 연결된 속성 개요를 참조하세요.For details, see Attached Properties Overview.

연결된 이벤트는 비슷한 ownerType.eventName 특성 구문 형식을 사용합니다.Attached events use a similar ownerType.eventName form of attribute syntax. 연결되지 않은 이벤트와 마찬가지로 XAML의 연결된 이벤트에 대한 특성 값은 이벤트가 요소에서 처리될 때 호출되는 처리기 메서드의 이름을 지정합니다.Just like the non-attached events, the attribute value for an attached event in XAML specifies the name of the handler method that is invoked when the event is handled on the element. WPF XAML에서 연결된 이벤트를 사용하는 것은 상대적으로 일반적이지 않습니다.Attached event usages in WPF XAML are less common. 자세한 내용은 연결된 이벤트 개요를 참조하세요.For more information, see Attached Events Overview.

기본 형식 및 XAMLBase types and XAML

기본 WPF XAML 및 해당 XAML 네임 스페이스는 XAML의 태그 요소 외에도 CLR 개체에 해당 하는 형식의 컬렉션입니다.Underlying WPF XAML and its XAML namespace is a collection of types that correspond to CLR objects in addition to markup elements for XAML. 하지만 모든 클래스를 요소에 매핑할 수 있는 것은 아닙니다.However, not all classes can be mapped to elements. 와 같은 ButtonBase추상 클래스 및 특정 비추상 기본 클래스는 CLR 개체 모델의 상속에 사용 됩니다.Abstract classes, such as ButtonBase, and certain nonabstract base classes are used for inheritance in the CLR objects model. 각각의 구체적인 XAML 요소는 계층 구조의 일부 기본 클래스에서 멤버를 상속하기 때문에 추상 클래스를 포함한 기본 클래스는 여전히 XAML 개발에 있어서 중요합니다.Base classes, including abstract ones, are still important to XAML development because each of the concrete XAML elements inherits members from some base class in its hierarchy. 이러한 멤버에는 대개 요소에서 특성으로 설정할 수 있는 속성 또는 처리될 수 있는 이벤트가 포함됩니다.Often these members include properties that can be set as attributes on the element, or events that can be handled. FrameworkElement는 WPF 프레임 워크 UIUI 수준에서 WPFWPF 의 구체적인 기본 클래스입니다.FrameworkElement is the concrete base UIUI class of WPFWPF at the WPF framework level. 디자인 UIUI시에는 모두에서 FrameworkElement파생 되는 다양 한 도형, 패널, 데코레이터 또는 컨트롤 클래스를 사용 합니다.When designing UIUI, you will use various shape, panel, decorator, or control classes, which all derive from FrameworkElement. 관련 기본 클래스인 FrameworkContentElement는에서 FrameworkElementapi를 의도적으로 미러링 하는 api를 사용 하 여 선형 레이아웃 표시에 대해 잘 작동 하는 문서 기반 요소를 지원 합니다.A related base class, FrameworkContentElement, supports document-oriented elements that work well for a flow layout presentation, using APIs that deliberately mirror the APIs in FrameworkElement. 요소 수준 및 CLR 개체 모델에 있는 특성의 조합은 특정 XAML 요소 및 해당 기본 형식에 관계 없이 가장 구체적인 XAML 요소에서 설정할 수 있는 공용 속성 집합을 제공 합니다.The combination of attributes at the element level and a CLR object model provides you with a set of common properties that are settable on most concrete XAML elements, regardless of the specific XAML element and its underlying type.

XAML 보안XAML security

XAML은 개체 인스턴스화 및 실행을 직접적으로 나타내는 태그 언어입니다.XAML is a markup language that directly represents object instantiation and execution. 따라서 XAML에서 만든 요소에는 생성된 해당 코드가 수행하는 것과 마찬가지로 시스템 리소스(예: 네트워크 액세스, 파일 시스템 IO)와 상호 작용하는 동일한 기능이 있습니다.Therefore, elements created in XAML have the same ability to interact with system resources (network access, file system IO, for example) as the equivalent generated code does.

WPFWPF.NET Framework 4 보안 프레임 워크 CAS (코드 액세스 보안)를 지원 합니다.supports the .NET Framework 4 security framework Code Access Security (CAS). 즉, 인터넷 영역에서 실행되는 WPFWPF 콘텐츠는 실행 권한이 줄어듭니다.This means that WPFWPF content running in the internet zone has reduced execution permissions. 이때 "느슨한 XAML"(컴파일되지 않은 XAML의 페이지가 로드 시 XAML 뷰어에 의해 해석됨) 및 XBAP(XAML 브라우저 애플리케이션)XAML browser application (XBAP)는 일반적으로 이 인터넷 영역에서 실행되며 같은 권한 집합을 사용합니다."Loose XAML" (pages of noncompiled XAML interpreted at load time by a XAML viewer) and XBAP(XAML 브라우저 애플리케이션)XAML browser application (XBAP) are usually run in this internet zone and use the same permission set. 하지만 완전히 신뢰할 수 있는 애플리케이션으로 로드된 XAML은 시스템 리소스에 대해 호스팅 애플리케이션과 동일한 액세스 권한을 가집니다.However, XAML loaded in to a fully trusted application has the same access to the system resources as the hosting application does. 자세한 내용은 WPF 부분 신뢰 보안을 참조하세요.For more information, see WPF Partial Trust Security.

코드에서 XAML 로드Loading XAML from code

XAML을 사용하여 전체 UI를 정의할 수 있지만 XAML에서 UI의 일부만 정의하는 것이 적합할 때도 있습니다.XAML can be used to define all of the UI, but it is sometimes also appropriate to define just a piece of the UI in XAML. 이 기능을 통해 부분 사용자 지정, 정보의 로컬 스토리지, XAML을 사용한 비즈니스 개체 제공을 비롯한 가능한 다양한 시나리오를 지원할 수 있습니다.This capability could be used to enable partial customization, local storage of information, using XAML to provide a business object, or a variety of possible scenarios. 이러한 시나리오 XamlReader 에 대 한 핵심은 클래스와 해당 Load 메서드입니다.The key to these scenarios is the XamlReader class and its Load method. 입력은 XAML 파일이며 출력은 해당 태그에서 만들어진 개체의 전체 런타임 트리를 나타내는 개체입니다.The input is a XAML file, and the output is an object that represents all of the run-time tree of objects that was created from that markup. 그런 다음 애플리케이션에 이미 존재하는 다른 개체의 속성으로 개체를 삽입할 수 있습니다.You then can insert the object to be a property of another object that already exists in the application. 속성이 표시 기능을 가지고 있으며 애플리케이션에 새 콘텐츠가 추가되었음을 실행 엔진에 알리는 콘텐츠 모델의 적절한 속성인 경우에는 XAML에 로드하여 실행 중인 애플리케이션의 콘텐츠를 쉽게 수정할 수 있습니다.So long as the property is an appropriate property in the content model that has eventual display capabilities and that will notify the execution engine that new content has been added into the application, you can modify a running application's contents very easily by loading in XAML. 하지만 이 기능은 실행되는 애플리케이션에 파일을 로드함으로써 보안에 가져올 수 있는 영향을 감안하여 일반적으로 완전히 신뢰할 수 있는 애플리케이션에서만 사용할 수 있게 되어 있습니다.Note that this capability is generally only available in full-trust applications, because of the obvious security implications of loading files into applications as they run.

새로운 기능What's next

이 항목에서는 WPF에 적용되는 XAML 구문 개념과 용어에 대한 기본적인 내용을 소개했습니다.This topic provides a basic introduction to XAML syntax concepts and terminology as it applies to WPF. 이 항목에서 사용된 용어에 대한 자세한 내용은 XAML 구문 정보를 참조하세요.For more information about the terms used here, see XAML Syntax In Detail.

아직 수행 하지 않은 경우 자습서 항목인 연습: 내 첫 번째 WPF 데스크톱응용 프로그램입니다.If you have not already done this, try the exercises in the tutorial topic Walkthrough: My first WPF desktop application. 자습서에서 설명하는 태그 중심 애플리케이션을 만들어보면 이 항목에서 설명하는 많은 개념을 더 확실하게 이해할 수 있을 것입니다.When you create the markup-centric application described by the tutorial, the exercise will help reinforce many of the concepts described in this topic.

WPFWPFApplication 클래스를 기반으로 하는 특정 응용 프로그램 모델을 사용 합니다.uses a particular application model that is based on the Application class. 자세한 내용은 애플리케이션 관리 개요를 참조하세요.For details, see Application Management Overview.

WPF 애플리케이션 빌드 에서는 명령줄에서 Microsoft Visual StudioMicrosoft Visual Studio를 사용하여 XAML 포함 애플리케이션을 만드는 방법에 대해 더 자세하게 설명합니다.Building a WPF Application gives you more details about how to build XAML inclusive applications from the command line and with Microsoft Visual StudioMicrosoft Visual Studio.

종속성 속성 개요에서는 WPFWPF의 다양한 속성에 대해 자세히 설명하고 종속성 속성의 개념을 소개합니다.Dependency Properties Overview gives more information about the versatility of properties in WPFWPF, and introduces the concept of dependency properties.

참고자료See also