ControlTemplate Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Define el árbol de elementos que se usa como plantilla de control para un control.
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>
- Herencia
- Atributos
Ejemplos
En el ejemplo siguiente se crea un controlTemplate simple para un button. La plantilla de control contiene una cuadrícula y especifica este comportamiento:
- Cuando el usuario coloca el mouse sobre el botón, la cuadrícula cambia de verde a rojo a medio segundo.
- Cuando el usuario mueve el mouse fuera del botón, grid cambia inmediatamente a verde.
<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>
Puedes ver la plantilla completa para cada control XAML en el archivo generic.xaml . Este archivo se encuentra en la carpeta (Archivos de programa)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP<SDK version>\Generic.
Comentarios
Para obtener más información y ejemplos, consulta Plantillas de control XAML.
ControlTemplate se usa como valor de la propiedad Control.Template , que define los objetos visuales de un control aplicando la plantilla. Casi siempre defines un ControlTemplate como un recurso XAML, usando una clave implícita TargetType que sea la misma que un Estilo que establece Control.Template con un Establecedor. Rara vez si alguna vez asigna un valor para Control.Template directamente en una instancia de control.
En realidad, solo hay dos propiedades que se usan al definir un ControlTemplate: TargetType y el contenido XAML implícito. ControlTemplate hereda el comportamiento de contenido XAML implícito de su elemento primario FrameworkTemplate . Básicamente, el elemento contenido en un ControlTemplate tal y como se define en XAML está asignando un elemento raíz para una estructura adicional de elementos XAML que definen la plantilla. Se establece una propiedad "Template" que no se puede examinar posteriormente mediante código y que solo tiene significado para cómo el analizador XAML asigna contenido a los controles en función de aplicar esa plantilla.
Para que su contenido se establezca desde un ControlTemplate, un elemento de control debe ser una subclase Control true, de modo que tenga la propiedad Control.Template . Hay otros casos en los que las plantillas aplican contenido, pero esto normalmente implica una de las otras clases de plantilla derivadas de FrameworkTemplate (DataTemplate o ItemsPanelTemplate).
Las plantillas de control proporcionan los objetos visuales y los elementos que componen una instancia de un control tal como aparece en la interfaz de usuario de una aplicación. En tiempo de ejecución, la plantilla ya se ha aplicado, por lo que todas las partes que se crearon a partir de la plantilla ahora son partes verdaderas del control, y se puede acceder a ellas mediante técnicas como examinar los ámbitos de nombres XAML desde el contenido de control o mediante la clase VisualTreeHelper . Eventos como los eventos de entrada a veces exponen las partes de un control que proceden de la plantilla de control aplicada.
Hay maneras de acceder al contenido definido por la plantilla antes o después de aplicar la plantilla a una instancia de control específica; consulte OnApplyTemplate o GetTemplateChild.
El momento real en el que se aplica un ControlTemplate a una instancia de control se puede detectar porque invoca el método virtual protegido OnApplyTemplate . Siempre que el control no esté sellado, puede subclase un control para que tenga la oportunidad de invalidar OnApplyTemplate. Esta invalidación se puede escribir para realizar acciones que no serían posibles antes de aplicar la plantilla. Por ejemplo, puede conectar controladores de eventos para controlar elementos o establecer propiedades de control para hacer referencia a elementos de objeto creados fuera de la plantilla, pero que no comenzaron con un valor de extensión de marcado {TemplateBinding} .
Constructores
ControlTemplate() |
Inicializa una nueva instancia de la clase ControlTemplate . |
Propiedades
Dispatcher |
Siempre devuelve |
DispatcherQueue |
Obtiene el objeto |
TargetType |
Obtiene o establece el tipo al que se aplica controlTemplate . |
Métodos
ClearValue(DependencyProperty) |
Borra el valor local de una propiedad de dependencia. (Heredado de DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
Devuelve cualquier valor base establecido para una propiedad de dependencia, que se aplicaría en los casos en los que una animación no está activa. (Heredado de DependencyObject) |
GetValue(DependencyProperty) |
Devuelve el valor efectivo actual de una propiedad de dependencia de dependencyObject. (Heredado de DependencyObject) |
ReadLocalValue(DependencyProperty) |
Devuelve el valor local de una propiedad de dependencia, si se establece un valor local. (Heredado de DependencyObject) |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Registra una función de notificación para escuchar los cambios en una dependencyProperty específica en esta instancia de DependencyObject . (Heredado de DependencyObject) |
SetValue(DependencyProperty, Object) |
Establece el valor local de una propiedad de dependencia en dependencyObject. (Heredado de DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Cancela una notificación de cambio registrada anteriormente llamando a RegisterPropertyChangedCallback. (Heredado de DependencyObject) |