Control.Template Свойство

Определение

Возвращает или задает шаблон элемента управления. Шаблон элемента управления определяет визуальный вид элемента управления в пользовательском интерфейсе и определяется в разметке XAML.

public:
 property ControlTemplate ^ Template { ControlTemplate ^ get(); void set(ControlTemplate ^ value); };
ControlTemplate Template();

void Template(ControlTemplate value);
public ControlTemplate Template { get; set; }
var controlTemplate = control.template;
control.template = controlTemplate;
Public Property Template As ControlTemplate
<control Template="{StaticResource templateResourceKey}"/>
- or -
<Style TargetType="controlTypeName">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="controlTypeName">
        templateRoot
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Значение свойства

Шаблон, определяющий внешний вид элемента управления. Элемент ControlTemplate должен иметь ровно один корневой элемент в качестве его содержимого.

Примеры

В этом примере показан более полный шаблон элемента управления, определенный в качестве стиля и задания со значением Setter.Property "Template". Это именованный стиль элемента управления RadioButton . Он включает элементы шаблона, которые обычно являются частью шаблона функционального элемента управления, например VisualStateManager.VisualStateGroups присоединенного элемента свойства, присоединенного к корневому элементу шаблона, и значения атрибутов x:Name , назначенные каждому из видных частей элемента управления.

<Style x:Key="TextRadioButtonStyle" TargetType="RadioButton"> 
    <Setter Property="MinWidth" Value="0"/> 
    <Setter Property="MinHeight" Value="0"/> 
    <Setter Property="Template"> 
        <Setter.Value> 
            <ControlTemplate TargetType="RadioButton"> 
                <Grid Background="Transparent"> 
                    <TextBlock 
                        x:Name="Text" 
                        Text="{TemplateBinding Content}" 
                        Margin="3,-7,3,10" 
                        TextWrapping="NoWrap" 
                        Style="{StaticResource SubheaderTextStyle}"/> 
                    <Rectangle 
                        x:Name="FocusVisualWhite" 
                        IsHitTestVisible="False" 
                        Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" 
                        StrokeEndLineCap="Square" 
                        StrokeDashArray="1,1" 
                        Opacity="0" 
                        StrokeDashOffset="1.5"/> 
                    <Rectangle 
                        x:Name="FocusVisualBlack" 
                        IsHitTestVisible="False" 
                        Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" 
                        StrokeEndLineCap="Square" 
                        StrokeDashArray="1,1" 
                        Opacity="0" 
                        StrokeDashOffset="0.5"/> 

                    <VisualStateManager.VisualStateGroups> 
                        <VisualStateGroup x:Name="CommonStates"> 
                            <VisualState x:Name="Normal"/> 
                            <VisualState x:Name="PointerOver"> 
                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPointerOverForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Pressed"> 

                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPressedForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Disabled"> 
                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ButtonDisabledForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                        </VisualStateGroup> 
                        <VisualStateGroup x:Name="FocusStates"> 
                            <VisualState x:Name="Focused"> 
                                <Storyboard> 
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualWhite" Storyboard.TargetProperty="Opacity"/> 
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualBlack" Storyboard.TargetProperty="Opacity"/> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Unfocused"/> 
                        </VisualStateGroup> 
                        <VisualStateGroup x:Name="CheckStates"> 
                            <VisualState x:Name="Checked"/> 
                            <VisualState x:Name="Unchecked"> 
                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationSecondaryForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Indeterminate"/> 
                        </VisualStateGroup> 
                    </VisualStateManager.VisualStateGroups> 
                </Grid> 
            </ControlTemplate> 
        </Setter.Value> 
    </Setter> 
</Style> 

Комментарии

Второй синтаксис XAML, показанный выше, является синтаксисом Setter в составе стиля. Это то, как значение шаблона для элемента управления определяется почти во всех случаях.

TargetType — это обязательный атрибут для всех элементов ControlTemplate , используемых в качестве значения шаблона. Значение должно соответствовать свойству TargetType для стиля , содержащего метод Setter для шаблона, если используется синтаксис набора стилей.

Элемент ControlTemplate указывает внешний вид элемента управления; Если элемент управления не имеет controlTemplate, элемент управления не будет отображаться в приложении. Автор элемента управления определяет шаблон элемента управления по умолчанию, а автор приложения может повторно шаблонировать XAML ControlTemplate , чтобы переопределить визуальное дерево элемента управления.

Шаблоны элементов управления обычно задаются в языке разметки расширяемых приложений (XAML) в рамках неявного стиля элемента управления. В этом случае значение свойства в setter задается как строка "Template", а значение Setter.Value задается как элемент свойства, содержащий элемент объекта ControlTemplate. Например, это стиль , определяющий значение шаблона для ScrollViewer. Это пример неявного стиля, где стиль может находиться в ResourceDictionary , но не требует атрибута x:Key.

<ResourceDictionary>
  <Style TargetType="ScrollViewer">
  ...
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="ScrollViewer">
          <!--visual root of template for a ScrollViewer-->
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
  ...
</ResourceDictionary>

Стили и шаблоны

Для применения значений к любому свойству зависимостей можно использовать метод Setter в стиле . Но это метод Setter для свойства Template класса, производного от элемента управления, который представляет большую часть разметки XAML в типичном стиле. Если стиль используется для определения шаблона элемента управления, TargetType элемента Style и TargetType элемента ControlTemplate для его элемента Control.Template setter всегда должен использовать одно и то же значение. Средство задания шаблонов определяет базовое определение шаблона пользовательского интерфейса для элемента управления, в котором применяется этот шаблон. Он также содержит визуальные состояния для элемента управления и другие определения пользовательского интерфейса на основе состояния, такие как переходы темы по умолчанию. Для сложного элемента управления, например ListBox, стиль шаблона по умолчанию и ControlTemplate могут содержать сотни строк XAML. Дополнительные сведения о роли шаблона в сценариях шаблонов управления см. в шаблонах элементов управления XAML Control.

Неявные стили

Вы можете определить стили таким образом, чтобы стиль использовался неявно всеми объектами одного и того же TargetType, не требуя, чтобы каждый экземпляр такого объекта специально ссылался на style как значение FrameworkElement.Style . <Style> Если ресурс объявлен в ResourceDictionary без атрибута x:Key, значение x:Key использует значение свойства TargetType. Если стиль задан неявно, стиль применяется только к типам, которые соответствуют TargetType точно и не к элементам, производным от значения TargetType . Например, если вы создаете стиль неявно для всех элементов управления ToggleButton в приложении, а в приложении есть элементы управления ToggleButton и CheckBox (CheckBox , производные от ToggleButton), неявный стиль ToggleButton применяется только к элементам управления ToggleButton .

Применяется к

См. также раздел