Информация
Запрошенная вами тема показана ниже. Однако эта тема не включена в библиотеку.

ControlTemplate - класс

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

Пространство имен:  System.Windows.Controls
Сборка:  PresentationFramework (в PresentationFramework.dll)
XMLNS для XAML: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

[DictionaryKeyPropertyAttribute("TargetType")]
[LocalizabilityAttribute(LocalizationCategory.None, Readability = Readability.Unreadable)]
public class ControlTemplate : FrameworkTemplate
<ControlTemplate>
  <VisualTreeRootNode>
VisualTreeNodeContents
  </VisualTreeRootNode>
</ControlTemplate>

Значения XAML

ControlTemplate

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

VisualTreeRootNode

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

VisualTreeNodeContents

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

Тип ControlTemplate предоставляет следующие члены.

  ИмяОписание
Открытый метод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 текущему объекту Object. (Унаследовано от Object.)
Защищенный методFinalize Позволяет объекту попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как объект будет утилизирован в процессе сборки мусора. (Унаследовано от Object.)
Открытый методFindName Находит элемент, связанный с указанным именем заданный в текущем шаблоне. (Унаследовано от FrameworkTemplate.)
Открытый методGetHashCode Играет роль хэш-функции для определённого типа. (Унаследовано от Object.)
Открытый методGetTypeВозвращает объект Type для текущего экземпляра. (Унаследовано от Object.)
Открытый методLoadContentЗагружает содержимое шаблона в виде экземпляра объекта и возвращает корневой элемент содержимого. (Унаследовано от FrameworkTemplate.)
Защищенный методMemberwiseClone Создает неполную копию текущего объекта Object. (Унаследовано от Object.)
Открытый методRegisterNameРегистрирует новую пару имя-объект в текущей области видимости имен. (Унаследовано от FrameworkTemplate.)
Открытый методSealБлокирует шаблон, предотвращая его изменение. (Унаследовано от FrameworkTemplate.)
Открытый методShouldSerializeResourcesВозвращает значение, указывающее, должны ли процессы сериализации сериализировать значение свойства Resources для экземпляров этого класса. (Унаследовано от FrameworkTemplate.)
Открытый методShouldSerializeVisualTreeВозвращает значение, указывающее, должны ли процессы сериализации сериализировать значение свойства VisualTree для экземпляров этого класса. (Унаследовано от FrameworkTemplate.)
Открытый методToStringВозвращение строки, представляющей текущий объект. (Унаследовано от Object.)
Открытый методUnregisterNameУдаляет из области видимости имен XAML сопоставление имя-объект. (Унаследовано от FrameworkTemplate.)
Защищенный методValidateTemplatedParentПроверяет шаблонный родительский элемент по набору правил. (Переопределяет FrameworkTemplate.ValidateTemplatedParent(FrameworkElement).)
Открытый методVerifyAccessОбеспечивает наличие у вызывающего потока доступ к этому DispatcherObject. (Унаследовано от DispatcherObject.)
В начало страницы

  ИмяОписание
Явная реализация интерфейсаЗакрытый методINameScope.FindNameИнфраструктура. Возвращает объект, имеющий предоставленное идентифицирующее имя. (Унаследовано от FrameworkTemplate.)
Явная реализация интерфейсаЗакрытый методIQueryAmbient.IsAmbientPropertyAvailableЗапрашивает, доступно ли заданное внешнее свойство в текущей области. (Унаследовано от FrameworkTemplate.)
В начало страницы

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

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

Написание собственного элемента управления, см. раздел "Создание настраиваемого элемента управления" в Общие сведения о разработке управления.

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

Ниже приведен пример 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:

Пример шаблона 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>


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

.NET Framework

Поддерживается в версиях: 4, 3.5, 3.0

.NET Framework (клиентский профиль)

Поддерживается в версиях: 4, 3.5 SP1

Windows 7, Windows Vista с пакетом обновления 1 (SP1) или выше, Windows XP с пакетом обновления 3 (SP3), Windows Server 2008 (Server Core не поддерживается), Windows Server 2008 R2 (Server Core поддерживается с пакетом обновления 1 (SP1) или более поздним), Windows Server 2003 SP2

.NET Framework поддерживает не все версии каждой платформы. Поддерживаемые версии перечислены в разделе Требования к системе для .NET Framework.

Любые открытые члены этого типа, объявленные как static (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантируется.

Добавления сообщества

Показ:
© 2014 Microsoft