Поделиться через


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
Наследование
Атрибуты

Примеры

Ниже показаноButtonStyle, как задать тип ControlTemplate :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 Button ControlTemplate

При установке Template свойства новогоControlTemplate, Control как в приведенном выше примере, вы заменяете весь шаблон. 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 Элемент Object для 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)

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

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