ControlTemplate Класс

Определение

Указывает визуальную структуру и аспекты поведения Control, которые могут совместно использоваться несколькими экземплярами элемента управления.

public ref class ControlTemplate : System::Windows::FrameworkTemplate
[System.Windows.Localizability(System.Windows.LocalizationCategory.None, Readability=System.Windows.Readability.Unreadable)]
[System.Windows.Markup.DictionaryKeyProperty("TargetType")]
public class ControlTemplate : System.Windows.FrameworkTemplate
[<System.Windows.Localizability(System.Windows.LocalizationCategory.None, Readability=System.Windows.Readability.Unreadable)>]
[<System.Windows.Markup.DictionaryKeyProperty("TargetType")>]
type ControlTemplate = class
    inherit FrameworkTemplate
Public Class ControlTemplate
Inherits FrameworkTemplate
Наследование
Атрибуты

Примеры

Ниже показан объект , задающий ControlTemplateButtonStyle объект :Button

<Style TargetType="Button">
  <!--Set to true to not get any properties from the themes.-->
  <Setter Property="OverridesDefaultStyle" Value="True"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Grid>
          <Ellipse Fill="{TemplateBinding Background}"/>
          <ContentPresenter HorizontalAlignment="Center"
                            VerticalAlignment="Center"/>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

При применении Button этого элемента отображается как :Ellipse

Пример button ControlTemplate

При установке Template свойства объекта Control на новый ControlTemplate , как в приведенном выше примере, вы заменяете весь шаблон. То, Button как выглядит объект при фокусе или нажатии, является частью внешнего вида по умолчанию заменяемой кнопки. Таким образом, в зависимости от потребностей может потребоваться указать в определении, как должна выглядеть кнопка при ее нажатии и т. д., как показано в следующем примере:

<Style TargetType="Button">
  <Setter Property="SnapsToDevicePixels"
          Value="true" />
  <Setter Property="OverridesDefaultStyle"
          Value="true" />
  <Setter Property="FocusVisualStyle"
          Value="{StaticResource ButtonFocusVisual}" />
  <Setter Property="MinHeight"
          Value="23" />
  <Setter Property="MinWidth"
          Value="75" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Border TextBlock.Foreground="{TemplateBinding Foreground}"
                x:Name="Border"
                CornerRadius="2"
                BorderThickness="1">
          <Border.BorderBrush>
            <LinearGradientBrush StartPoint="0,0"
                                 EndPoint="0,1">
              <LinearGradientBrush.GradientStops>
                <GradientStopCollection>
                  <GradientStop Color="{DynamicResource BorderLightColor}"
                                Offset="0.0" />
                  <GradientStop Color="{DynamicResource BorderDarkColor}"
                                Offset="1.0" />
                </GradientStopCollection>
              </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>

          </Border.BorderBrush>
          <Border.Background>
            <LinearGradientBrush EndPoint="0.5,1"
                                 StartPoint="0.5,0">
              <GradientStop Color="{DynamicResource ControlLightColor}"
                            Offset="0" />
              <GradientStop Color="{DynamicResource ControlMediumColor}"
                            Offset="1" />
            </LinearGradientBrush>
          </Border.Background>
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0:0:0.5" />
                <VisualTransition GeneratedDuration="0"
                                  To="Pressed" />
              </VisualStateGroup.Transitions>
              <VisualState x:Name="Normal" />
              <VisualState x:Name="MouseOver">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource ControlMouseOverColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState x:Name="Pressed">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource ControlPressedColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
                      (GradientBrush.GradientStops)[0].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource PressedBorderDarkColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource PressedBorderLightColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState x:Name="Disabled">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource DisabledControlDarkColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames
                      Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource DisabledForegroundColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource DisabledBorderDarkColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <ContentPresenter Margin="2"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            RecognizesAccessKey="True" />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsDefault"
                   Value="true">

            <Setter TargetName="Border"
                    Property="BorderBrush">
              <Setter.Value>
                <LinearGradientBrush StartPoint="0,0"
                                     EndPoint="0,1">
                  <GradientBrush.GradientStops>
                    <GradientStopCollection>
                      <GradientStop Color="{DynamicResource DefaultBorderBrushLightBrush}"
                                    Offset="0.0" />
                      <GradientStop Color="{DynamicResource DefaultBorderBrushDarkColor}"
                                    Offset="1.0" />
                    </GradientStopCollection>
                  </GradientBrush.GradientStops>
                </LinearGradientBrush>

              </Setter.Value>
            </Setter>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Обратите внимание, что этот пример ссылается на ресурсы, которые здесь не показаны. Полный пример см. в разделе Пример задания стиля с помощью ControlTemplates. Этот пример содержит примеры шаблонов элементов управления для многих элементов управления и является лучшим способом для начала создания шаблонов элементов управления.

Комментарии

Позволяет ControlTemplate указать визуальную структуру элемента управления. Автор элемента управления может определить значение по умолчанию ControlTemplate , а автор приложения может переопределить ControlTemplate , чтобы восстановить визуальную структуру элемента управления.

Создание шаблонов элементов управления — это одна из многих функций, предлагаемых моделью стилей и шаблонов WPF. Модель стилей и шаблонов обеспечивает такую большую гибкость, что во многих случаях вам не нужно писать собственные элементы управления. Если вы являетесь автором приложения, который хочет изменить визуализацию элемента управления или заменить ControlTemplate существующий элемент управления, ознакомьтесь с примерами и подробным обсуждением в разделе Стилизация и шаблон .

Если вы создаете собственный элемент управления, см. раздел Создание пользовательского элемента управления в обзоре разработки элементов управления.

Объект ControlTemplate предназначен для автономной единицы сведений о реализации, которая невидима для внешних пользователей и объектов, включая стили. Единственный способ управлять содержимым шаблона элемента управления — из одного шаблона элемента управления.

Использование элемента свойства XAML

<ControlTemplate>  
  <VisualTreeRootNode>
    VisualTreeNodeContents  
  </VisualTreeRootNode>  
</ControlTemplate>  

Значения XAML

ControlTemplate
Объектный элемент для ControlTemplate или производного класса.

VisualTreeRootNode
Один элемент XAML в качестве непосредственного дочернего элемента ControlTemplate (или производного класса). Шаблоны должны иметь один корневой узел. Чтобы создать полезный шаблон, элемент, выбранный как VisualTreeRootNode , должен поддерживать собственную модель содержимого, часто модель, которая поддерживает несколько дочерних элементов.

VisualTreeNodeContents
Один или несколько элементов, которые заполняют предполагаемый шаблон. Если элемент, выбранный как VisualTreeRootNode , поддерживает только один дочерний элемент, то может быть только один элемент, объявленный как VisualTreeNodeContents. Кроме того, можно (хотя и редко) предоставить текстовое содержимое, если выбранный VisualTreeRootNode поддерживает свойство текстового содержимого.

Конструкторы

ControlTemplate()

Инициализирует новый экземпляр класса ControlTemplate.

ControlTemplate(Type)

Инициализация нового экземпляра класса ControlTemplate с указанным конечным типом.

Свойства

Dispatcher

Возвращает объект Dispatcher, с которым связан этот объект DispatcherObject.

(Унаследовано от DispatcherObject)
HasContent

Возвращает значение, указывающее, имеет ли данный шаблон оптимизированное содержимое.

(Унаследовано от FrameworkTemplate)
IsSealed

Возвращает значение, указывающее, находится ли данный объект в неизменяемом состоянии (когда изменить его нельзя).

(Унаследовано от FrameworkTemplate)
Resources

Получает или задает коллекцию ресурсов, которые могут использоваться в области видимости данного шаблона.

(Унаследовано от FrameworkTemplate)
TargetType

Получает или задает тип, для которого предназначен этот ControlTemplate.

Template

Получает или задает ссылку на объект, который записывающий или воспроизводящий узлы XAML для шаблона при определении или применении шаблона модулем записи.

(Унаследовано от FrameworkTemplate)
Triggers

Получает коллекцию объектов TriggerBase, применяющих изменения свойства или выполняющих действия на основании указанных условий.

VisualTree

Получает или задает корневой узел шаблона.

(Унаследовано от FrameworkTemplate)

Методы

CheckAccess()

Определяет, имеет ли вызывающий поток доступ к этому DispatcherObject.

(Унаследовано от DispatcherObject)
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
FindName(String, FrameworkElement)

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

(Унаследовано от FrameworkTemplate)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
LoadContent()

Загружает содержимое шаблона в виде экземпляра объекта и возвращает корневой элемент содержимого.

(Унаследовано от FrameworkTemplate)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
RegisterName(String, Object)

Регистрирует новую пару имя-объект в текущей области видимости имен.

(Унаследовано от FrameworkTemplate)
Seal()

Блокирует шаблон, предотвращая его изменение.

(Унаследовано от FrameworkTemplate)
ShouldSerializeResources(XamlDesignerSerializationManager)

Возвращает значение, указывающее, должны ли процессы сериализации сериализировать значение свойства Resources для экземпляров этого класса.

(Унаследовано от FrameworkTemplate)
ShouldSerializeVisualTree()

Возвращает значение, указывающее, должны ли процессы сериализации сериализировать значение свойства VisualTree для экземпляров этого класса.

(Унаследовано от FrameworkTemplate)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
UnregisterName(String)

Удаляет из области видимости имен XAML сопоставление имя-объект.

(Унаследовано от FrameworkTemplate)
ValidateTemplatedParent(FrameworkElement)

Проверяет шаблонный родительский элемент по набору правил.

VerifyAccess()

Обеспечивает наличие у вызывающего потока доступ к этому DispatcherObject.

(Унаследовано от DispatcherObject)

Явные реализации интерфейса

INameScope.FindName(String)

Возвращает объект с предоставленным идентифицирующим именем.

(Унаследовано от FrameworkTemplate)
IQueryAmbient.IsAmbientPropertyAvailable(String)

Запрашивает, доступно ли заданное внешнее свойство в текущей области.

(Унаследовано от FrameworkTemplate)

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

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