Partilhar via


ControlTemplate Classe

Definição

Define a árvore de elementos usada como o modelo de controle para um controle .

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>
Herança
Object Platform::Object IInspectable DependencyObject FrameworkTemplate ControlTemplate
Atributos

Exemplos

O exemplo a seguir cria um ControlTemplate simples para um Botão. O modelo de controle contém uma Grade e especifica esse comportamento:

  • Quando o usuário coloca o mouse sobre o Botão, a Grade muda de verde para vermelho durante meio segundo.
  • Quando o usuário move o mouse para longe do botão, a Grade muda imediatamente de volta para 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>

Você pode ver o modelo completo para cada controle XAML no arquivo generic.xaml . Esse arquivo é encontrado na pasta (Arquivos de Programas)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP<SDK version>\Generic.

Comentários

Para obter mais informações e exemplos, consulte Modelos de controle XAML.

ControlTemplate é usado como o valor da propriedade Control.Template , que define os visuais de um controle aplicando o modelo. Você quase sempre define um ControlTemplate como um recurso XAML, usando uma chave implícita TargetType que é igual a um Style que define Control.Template com um Setter. Você raramente atribui um valor para Control.Template diretamente em uma instância de controle.

Na verdade, há apenas duas propriedades que você usa ao definir um ControlTemplate: o TargetType e o conteúdo XAML implícito. ControlTemplate herda o comportamento implícito de conteúdo XAML de seu pai FrameworkTemplate . Basicamente, o elemento contido em um ControlTemplate, conforme definido em XAML, está atribuindo um elemento raiz para uma estrutura adicional de elementos XAML que definem o modelo. Isso está definindo uma propriedade "Template" que não pode ser examinada posteriormente por código e só tem significado para como o analisador XAML atribui conteúdo para controles com base na aplicação desse modelo.

Para que seu conteúdo seja definido de um ControlTemplate, um elemento de controle deve ser uma subclasse Control verdadeira, para que tenha a propriedade Control.Template . Há outros casos em que os modelos aplicam conteúdo, mas isso geralmente envolve uma das outras classes de modelo derivadas frameworkTemplate (DataTemplate ou ItemsPanelTemplate).

Os modelos de controle fornecem os visuais e partes que compõem uma instância de um controle conforme ele aparece na interface do usuário de um aplicativo. Em tempo de execução, o modelo já foi aplicado e, portanto, todas as partes que foram criadas fora do modelo agora são verdadeiramente partes do controle e podem ser acessadas por técnicas como examinar os namescopes XAML de dentro do conteúdo do controle ou usar a classe VisualTreeHelper . Eventos como os eventos de entrada às vezes expõem as partes de um controle provenientes do modelo de controle aplicado.

Há maneiras de acessar o conteúdo definido pelo modelo antes ou depois que o modelo é aplicado a uma instância de controle específica; consulte OnApplyTemplate ou GetTemplateChild.

O ponto real no tempo em que um ControlTemplate é aplicado a uma instância de controle pode ser detectado porque isso invoca o método virtual protegido OnApplyTemplate . Desde que o controle não seja lacrado, você pode subclasse de um controle para que tenha a oportunidade de substituir OnApplyTemplate. Essa substituição pode ser gravada para executar ações que não seriam possíveis antes da aplicação do modelo. Por exemplo, você pode conectar manipuladores de eventos para controlar partes ou definir propriedades de controle para referenciar partes de objeto que foram criadas a partir do modelo, mas não começaram com um valor de extensão de marcação {TemplateBinding }.

Construtores

ControlTemplate()

Inicializa uma nova instância da classe ControlTemplate .

Propriedades

Dispatcher

Sempre retorna null em um aplicativo SDK do Aplicativo Windows. Em vez disso, use DispatcherQueue .

(Herdado de DependencyObject)
DispatcherQueue

Obtém o ao DispatcherQueue qual este objeto está associado. O DispatcherQueue representa uma instalação que pode acessar o DependencyObject no thread da interface do usuário, mesmo que o código seja iniciado por um thread que não seja da interface do usuário.

(Herdado de DependencyObject)
TargetType

Obtém ou define o tipo ao qual ControlTemplate é aplicado.

Métodos

ClearValue(DependencyProperty)

Limpa o valor local de uma propriedade de dependência.

(Herdado de DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Retorna qualquer valor base estabelecido para uma propriedade de dependência, que se aplicaria nos casos em que uma animação não está ativa.

(Herdado de DependencyObject)
GetValue(DependencyProperty)

Retorna o valor efetivo atual de uma propriedade de dependência de um DependencyObject.

(Herdado de DependencyObject)
ReadLocalValue(DependencyProperty)

Retorna o valor local de uma propriedade de dependência, se um valor local for definido.

(Herdado de DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Registra uma função de notificação para escutar alterações em uma DependencyProperty específica nessa instância dependencyObject .

(Herdado de DependencyObject)
SetValue(DependencyProperty, Object)

Define o valor local de uma propriedade de dependência em um DependencyObject.

(Herdado de DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Cancela uma notificação de alteração que foi registrada anteriormente chamando RegisterPropertyChangedCallback.

(Herdado de DependencyObject)

Aplica-se a

Confira também