ControlTemplate Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет дерево элементов, используемое в качестве шаблона элемента управления для элемента управления.
public ref class ControlTemplate sealed : FrameworkTemplate
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class ControlTemplate final : FrameworkTemplate
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class ControlTemplate : FrameworkTemplate
Public NotInheritable Class ControlTemplate
Inherits FrameworkTemplate
<ControlTemplate ...>
templateRootElement
</ControlTemplate>
- Наследование
- Атрибуты
Примеры
В следующем примере создается простой шаблон ControlTemplate для элемента Button. Шаблон элемента управления содержит один элемент управления Grid и задает следующее поведение:
- Когда пользователь навел указатель мыши на кнопку, сетка меняется с зеленого на красный более половины секунды.
- Когда пользователь перемещает мышь от кнопки, элемент Grid сразу же меняется на зеленый.
<ControlTemplate TargetType="Button">
<Grid >
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<!--Take one half second to transition to the PointerOver state.-->
<VisualTransition To="PointerOver"
GeneratedDuration="0:0:0.5"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<!--Change the SolidColorBrush, ButtonBrush, to red when the
Pointer is over the button.-->
<VisualState x:Name="PointerOver">
<Storyboard>
<ColorAnimation Storyboard.TargetName="ButtonBrush"
Storyboard.TargetProperty="Color" To="Red" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.Background>
<SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
</Grid.Background>
</Grid>
</ControlTemplate>
Полный шаблон для каждого элемента управления XAML можно просмотреть в файле generic.xaml . Этот файл находится в папке (Program Files)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP<SDK version>\Generic.
Комментарии
Дополнительные сведения и примеры см. в разделе Шаблоны элементов управления XAML.
ControlTemplate используется в качестве значения свойства Control.Template , которое определяет визуальные элементы элемента управления путем применения шаблона. Вы почти всегда определяете ControlTemplate как ресурс XAML, используя неявный ключ TargetType , который совпадает с стилем, который задает Control.Template с методом задания. Вы редко назначаете значение для Control.Template непосредственно в экземпляре элемента управления.
При определении ControlTemplate используются только два свойства: TargetType и неявное содержимое XAML. ControlTemplate наследует неявное поведение содержимого XAML от родительского элемента FrameworkTemplate . По сути, элемент, содержащийся в ControlTemplate, как определено в XAML, назначает корневой элемент для дальнейшей структуры элементов XAML, которые определяют шаблон. Это задание свойства Template, которое впоследствии не может быть проверено кодом и имеет значение только для того, как средство синтаксического анализа XAML назначает содержимое для элементов управления на основе применения этого шаблона.
Чтобы его содержимое было задано из ControlTemplate, элемент управления должен быть истинным подклассом Control , чтобы у него было свойство Control.Template . Существуют и другие случаи, когда шаблоны применяют содержимое, но обычно это включает один из других классов шаблонов, производных от FrameworkTemplate (DataTemplate или ItemsPanelTemplate).
Шаблоны элементов управления предоставляют визуальные элементы и части, составляющие экземпляр элемента управления, который отображается в пользовательском интерфейсе приложения. Во время выполнения шаблон уже был применен, поэтому все части, созданные на основе шаблона, теперь действительно являются частями элемента управления и могут быть доступны с помощью таких методов, как изучение областей имен XAML из содержимого элемента управления или с помощью класса VisualTreeHelper . Такие события, как входные события, иногда предоставляют части элемента управления, полученные из примененного шаблона элемента управления.
Существуют способы доступа к содержимому, определяемого шаблоном, до или после применения шаблона к конкретному экземпляру элемента управления. см . OnApplyTemplate или GetTemplateChild.
Фактический момент времени применения ControlTemplate к экземпляру элемента управления можно определить, так как он вызывает защищенный виртуальный метод OnApplyTemplate . Пока элемент управления не запечатан, вы можете подкласс элемента управления, чтобы иметь возможность переопределить OnApplyTemplate. Это переопределение можно написать для выполнения действий, которые были бы невозможными до применения шаблона. Например, можно подключить обработчики событий для управления частями или задать свойства элемента управления для ссылки на части объекта, созданные на основе шаблона, но не начинающиеся со значения расширения разметки {TemplateBinding} .
Конструкторы
ControlTemplate() |
Инициализирует новый экземпляр класса ControlTemplate . |
Свойства
Dispatcher |
Всегда возвращает в |
DispatcherQueue |
Возвращает объект , |
TargetType |
Возвращает или задает тип, к которому применяется ControlTemplate . |
Методы
ClearValue(DependencyProperty) |
Очищает локальное значение свойства зависимостей. (Унаследовано от DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
Возвращает любое базовое значение, установленное для свойства зависимостей, которое применяется в случаях, когда анимация не активна. (Унаследовано от DependencyObject) |
GetValue(DependencyProperty) |
Возвращает текущее действующее значение свойства зависимостей из DependencyObject. (Унаследовано от DependencyObject) |
ReadLocalValue(DependencyProperty) |
Возвращает локальное значение свойства зависимостей, если задано локальное значение. (Унаследовано от DependencyObject) |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Регистрирует функцию уведомления для прослушивания изменений определенного DependencyProperty в этом экземпляре DependencyObject . (Унаследовано от DependencyObject) |
SetValue(DependencyProperty, Object) |
Задает локальное значение свойства зависимостей для Объекта DependencyObject. (Унаследовано от DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Отменяет уведомление об изменениях, которое было ранее зарегистрировано путем вызова Метода RegisterPropertyChangedCallback. (Унаследовано от DependencyObject) |