Template settings 클래스Template settings classes

필수 구성 요소Prerequisites

UI에 컨트롤을 추가 하 고, 속성을 설정 하 고, 이벤트 처리기를 연결할 수 있다고 가정 합니다.We assume that you can add controls to your UI, set their properties, and attach event handlers. 응용 프로그램에 컨트롤을 추가 하는 방법에 대 한 지침은 컨트롤 추가 및 이벤트 처리를 참조 하세요.For instructions for adding controls to your app, see Add controls and handle events. 또한 기본 템플릿의 복사본을 만들고 편집 하 여 컨트롤에 대 한 사용자 지정 템플릿을 정의 하는 방법의 기본 사항을 알고 있다고 가정 합니다.We also assume that you know the basics of how to define a custom template for a control by making a copy of the default template and editing it. 이에 대 한 자세한 내용은 빠른 시작: 컨트롤 템플릿을 참조 하세요.For more info on this, see Quickstart: Control templates.

서식 설정 클래스에 대 한 시나리오The scenario for TemplateSettings classes

템플릿 설정 클래스는 컨트롤에 대 한 새 컨트롤 템플릿을 정의할 때 사용 되는 속성 집합을 제공 합니다.TemplateSettings classes provide a set of properties that are used when you define a new control template for a control. 속성에는 특정 UI 요소 부분의 크기에 대 한 픽셀 측정치와 같은 값이 있습니다.The properties have values such as pixel measurements for the size of certain UI element parts. 값은 경우에 따라 일반적으로 쉽게 재정의 하거나 액세스할 수 없는 제어 논리에서 제공 되는 계산 된 값입니다.The values are sometimes calculated values that come from control logic that isn't typically easy to override or even access. 일부 속성은 요소에 대 한 전환 및 애니메이션을 제어 하는 값의 일부 이며, 따라서 관련 된 템플릿 설정 속성은 쌍으로 제공 됩니다.Some of the properties are intended as From and To values that control transitions and animations of parts, and thus the relevant TemplateSettings properties come in pairs.

여러 서식 설정 클래스가 있습니다.There are several TemplateSettings classes. 모든 파일은 Windows. .xaml 네임 스페이스에 있습니다.All of them are in the Windows.UI.Xaml.Controls.Primitives namespace. 다음은 클래스 목록과 관련 컨트롤의 템플릿 설정 속성에 대 한 링크입니다.Here's a list of the classes, and a link to the TemplateSettings property of the relevant control. 이 템플릿 설정 속성은 컨트롤에 대 한 템플릿 설정 값에 액세스 하는 방법 이며 해당 속성에 대 한 템플릿 바인딩을 설정할 수 있습니다.This TemplateSettings property is how you access the TemplateSettings values for the control, and can establish template bindings to its properties:

템플릿 설정 속성은 코드를 사용 하는 것이 아니라 XAML에서 항상 사용 됩니다.TemplateSettings properties are always intended to be used in XAML, not code. 부모 컨트롤의 읽기 전용 템플릿 설정 속성에 대 한 읽기 전용 하위 속성입니다.They are read-only sub-properties of a read-only TemplateSettings property of a parent control. 컨트롤기반 클래스를 만들고 컨트롤 논리에 영향을 줄 수 있는 고급 사용자 지정 컨트롤 시나리오의 경우 컨트롤의 템플릿을 다시 작성 하는 모든 사용자에 게 유용할 수 있는 정보를 전달 하기 위해 컨트롤에 사용자 지정 템플릿 설정 속성을 정의 하는 것이 좋습니다.For an advanced custom control scenario, where you're creating a new Control-based class and thus can influence the control logic, consider defining a custom TemplateSettings property on the control in order to communicate info that might be useful for anyone that is re-templating the control. 해당 속성의 읽기 전용 값으로 템플릿 측정, 애니메이션 위치 지정과 관련 된 각 정보 항목에 대 한 읽기 전용 속성을 포함 하는 컨트롤에 관련 된 새 템플릿 설정 클래스를 정의 하 고 호출자에 게 컨트롤 논리를 사용 하 여 초기화 된 해당 클래스의 런타임 인스턴스를 부여 합니다.As that property's read-only value, define a new TemplateSettings class related to your control that has read-only properties for each of the info items that are relevant for template measurements, animation positioning, and so on, and give callers the runtime instance of that class that's initialized using your control logic. 템플릿 설정 클래스는 DependencyObject에서 파생 되므로 속성은 속성 변경 콜백에 대 한 종속성 속성 시스템을 사용할 수 있습니다.TemplateSettings classes are derived from DependencyObject, so that the properties can use the dependency property system for property-changed callbacks. 그러나 템플릿 설정 속성이 호출자에 게 읽기 전용 이기 때문에 속성에 대 한 종속성 속성 식별자는 공용 API로 노출 되지 않습니다.But the dependency property identifiers for the properties aren't exposed as public API, because the TemplateSettings properties are meant to be read-only to callers.

컨트롤 템플릿에서 서식 파일 설정을 사용 하는 방법How to use TemplateSettings in a control template

다음은 기본 XAML 컨트롤 템플릿 시작에서 제공 되는 예제입니다.Here's an example that comes from the starting default XAML control templates. 이 특정 항목은 ProgressRing의 기본 템플릿에서 가져온 것입니다.This particular one is from the default template of ProgressRing:

<Ellipse
    x:Name="E1"
    Style="{StaticResource ProgressRingEllipseStyle}"
    Width="{Binding RelativeSource={RelativeSource TemplatedParent}, 
        Path=TemplateSettings.EllipseDiameter}"
    Height="{Binding RelativeSource={RelativeSource TemplatedParent}, 
        Path=TemplateSettings.EllipseDiameter}"
    Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, 
        Path=TemplateSettings.EllipseOffset}"
    Fill="{TemplateBinding Foreground}"/>

ProgressRing 템플릿에 대 한 전체 XAML은 수백 줄 이므로이는 작은 발췌 일 뿐입니다.The full XAML for the ProgressRing template is hundreds of lines, so this is just a tiny excerpt. 이 XAML은 확정 되지 않은 진행률에 대해 회전 하는 애니메이션을 표시 된다 하는 6 개의 타원 요소 중 하나인 컨트롤 파트를 정의 합니다.This XAML defines a control part that is one of 6 Ellipse elements that portray the spinning animation for indeterminate progress. 개발자는 원이 마음에 들지 않을 수 있으며 애니메이션이 진행 되는 방식에 다른 그래픽 기본 형식 또는 다른 기본 셰이프를 사용할 수 있습니다.As a developer, you might not like the circles and might use a different graphics primitive or a different basic shape for how the animation progresses. 예를 들어 사각형에 정렬 된 사각형 요소 집합을 사용 하는 ProgressRing 을 구성할 수 있습니다.For example, you might compose a ProgressRing that uses a set of Rectangle elements arranged in a square instead. 그렇다면 새 템플릿의 각 개별 사각형 구성 요소가 다음과 같이 표시 될 수 있습니다.If so, each individual Rectangle component of your new template might look like this:

<Rectangle
    x:Name="R1"
    Width="{Binding RelativeSource={RelativeSource TemplatedParent}, 
        Path=TemplateSettings.EllipseDiameter}"
    Height="{Binding RelativeSource={RelativeSource TemplatedParent}, 
        Path=TemplateSettings.EllipseDiameter}"
    Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, 
        Path=TemplateSettings.EllipseOffset}"
    Fill="{TemplateBinding Foreground}"/>

여기에서 템플릿 설정 속성이 유용한 이유는 ProgressRing의 기본 제어 논리에서 발생 하는 계산 된 값 이기 때문입니다.The reason that the TemplateSettings properties are useful here is because they are calculated values coming from the basic control logic of ProgressRing. 계산은 ProgressRing의 전체 system.windows.frameworkelement.actualwidthsystem.windows.frameworkelement.actualheight 를 나누고 템플릿 파트가 내용에 맞게 조정 될 수 있도록 템플릿의 각 동작 요소에 대해 계산 된 측정값을 allotting 합니다.The calculation is dividing up the overall ActualWidth and ActualHeight of the ProgressRing, and allotting a calculated measurement for each of the motion elements in its templates so that the template parts can size to content.

다음은 기본 XAML 컨트롤 템플릿의 다른 예제 사용법입니다. 이번에는 애니메이션의 시작 및 끝에 해당 하는 속성 집합 중 하나를 표시 합니다.Here's another example usage from the default XAML control templates, this time showing one of the property sets that are the From and To of an animation. 콤보 상자 기본 템플릿에서 다음을 수행 합니다.This is from the ComboBox default template:

<VisualStateGroup x:Name="DropDownStates">
    <VisualState x:Name="Opened">
        <Storyboard>
            <SplitOpenThemeAnimation
               OpenedTargetName="PopupBorder"
               ContentTargetName="ScrollViewer"
               ClosedTargetName="ContentPresenter"
               ContentTranslationOffset="0"
               OffsetFromCenter="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                 Path=TemplateSettings.DropDownOffset}"
               OpenedLength="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                 Path=TemplateSettings.DropDownOpenedHeight}"
               ClosedLength="{Binding RelativeSource={RelativeSource TemplatedParent},
                 Path=TemplateSettings.DropDownClosedHeight}" />
        </Storyboard>
   </VisualState>
...
</VisualStateGroup>

템플릿에 많은 XAML이 있으므로 발췌만 표시 됩니다.Again there is lots of XAML in the template so we only show an excerpt. 그리고 각각 동일한 ComboBoxTemplateSettings 속성을 사용 하는 여러 상태 및 테마 애니메이션 중 하나일 뿐입니다.And this is only one of several states and theme animations that each use the same ComboBoxTemplateSettings properties. ComboBox의 경우 ComboBoxTemplateSettings 값을 통해 바인딩을 사용 하면 템플릿의 관련 애니메이션이 공유 값을 기반으로 하는 위치에서 중지 및 시작 되므로 원활 하 게 전환할 수 있습니다.For ComboBox, use of the ComboBoxTemplateSettings values through bindings enforces that related animations in the template will stop and start at positions that are based on shared values, and thus transition smoothly.

참고    컨트롤 템플릿의 일부로 템플릿 설정 값을 사용 하는 경우 값의 형식과 일치 하는 속성을 설정 하 고 있는지 확인 합니다.Note   When you do use TemplateSettings values as part of your control template, make sure you're setting properties that match the type of the value. 그렇지 않으면 바인딩의 대상 형식을 템플릿 설정 값의 다른 원본 형식에서 변환할 수 있도록 바인딩에 대 한 값 변환기를 만들어야 할 수 있습니다.If not, you might need to create a value converter for the binding so that the target type of the binding can be converted from a different source type of the TemplateSettings value. 자세한 내용은 ivalueconverter.convert를 참조 하세요.For more info, see IValueConverter.