ControlTemplate Classe

Definição

Especifica a estrutura visual e os aspectos comportamentais de um Control que podem ser compartilhados entre várias instâncias do controle.

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
Herança
Atributos

Exemplos

O seguinte mostra um ButtonStyle que define o ControlTemplate de um 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>

Quando isso é aplicado, o Button aparece como um Ellipse:

Exemplo de Button ControlTemplate de exemplo ControlTemplate

Quando você define a propriedade Template de um Control para uma nova ControlTemplate como no exemplo acima, você está substituindo todo o modelo. A aparência do Button quando ele está em foco ou pressionado faz parte da aparência padrão do botão que você está substituindo. Portanto, dependendo de suas necessidades, talvez você queira colocar em sua definição a aparência do botão quando ele for pressionado e assim por diante, como no exemplo a seguir:

<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>

Observe que este exemplo faz referência a recursos que não são mostrados aqui. Para obter o exemplo completo, consulte Estilo com ode Exemplo ControlTemplates. Esse exemplo fornece exemplos de modelos de controle para muitos controles e é a melhor maneira de começar a criar modelos de controle.

Comentários

O ControlTemplate permite especificar a estrutura visual de um controle. O autor do controle pode definir o ControlTemplate padrão e o autor do aplicativo pode substituir o ControlTemplate para reconstruir a estrutura visual do controle.

A modelagem de controle é um dos muitos recursos oferecidos pelo modelo de modelagem e estilo do WPF. O modelo de modelagem e estilo oferece uma flexibilidade tão grande que, em muitos casos, você não precisa escrever seus próprios controles. Se você for um autor de aplicativo que deseja alterar a visualização do controle ou substituir o de um controle existente, consulte o tópico Estilo e Modelagem para obter exemplos e uma discussão detalhada.

Se você estiver escrevendo seu próprio controle, consulte "Criar um controle personalizado" na visão geral de criação de controle de .

Uma ControlTemplate destina-se a ser uma unidade autocontida de detalhes de implementação que é invisível para usuários e objetos externos, incluindo estilos. A única maneira de manipular o conteúdo do modelo de controle é dentro do mesmo modelo de controle.

Uso do elemento de propriedade XAML

<ControlTemplate>
  <VisualTreeRootNode>
    VisualTreeNodeContents
  </VisualTreeRootNode>
</ControlTemplate>

Valores XAML

elemento ControlTemplate Object para ControlTemplate ou uma classe derivada.

VisualTreeRootNode um único elemento XAML como o filho imediato do ControlTemplate (ou uma classe derivada). Os modelos devem ter um único nó raiz. Para gerar um modelo útil, espera-se que o elemento escolhido como VisualTreeRootNode dê suporte a um modelo de conteúdo próprio, geralmente um modelo que dê suporte a vários elementos filho.

VisualTreeNodeContents um ou mais elementos que completam o modelo pretendido. Se o elemento escolhido como VisualTreeRootNode oferecer suporte apenas a um único filho, só poderá haver um elemento declarado como VisualTreeNodeContents. Também é possível (embora incomum) fornecer conteúdo de texto se o VisualTreeRootNode escolhido der suporte a uma propriedade de conteúdo de texto.

Construtores

ControlTemplate()

Inicializa uma nova instância da classe ControlTemplate.

ControlTemplate(Type)

Inicializa uma nova instância da classe ControlTemplate com o tipo de destino especificado.

Propriedades

Dispatcher

Obtém o Dispatcher ao qual esse DispatcherObject está associado.

(Herdado de DispatcherObject)
HasContent

Obtém um valor que indica se esse modelo tem conteúdo otimizado.

(Herdado de FrameworkTemplate)
IsSealed

Obtém um valor que indica se esse objeto está em um estado imutável para que ele não possa ser alterado.

(Herdado de FrameworkTemplate)
Resources

Obtém ou define a coleção de recursos que podem ser usados no escopo desse modelo.

(Herdado de FrameworkTemplate)
TargetType

Obtém ou define o tipo para o qual essa ControlTemplate é destinada.

Template

Obtém ou define uma referência ao objeto que registra ou reproduz os nós XAML para o modelo quando o modelo é definido ou aplicado por um gravador.

(Herdado de FrameworkTemplate)
Triggers

Obtém uma coleção de objetos TriggerBase que aplicam alterações de propriedade ou executam ações com base nas condições especificadas.

VisualTree

Obtém ou define o nó raiz do modelo.

(Herdado de FrameworkTemplate)

Métodos

CheckAccess()

Determina se o thread de chamada tem acesso a esse DispatcherObject.

(Herdado de DispatcherObject)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
FindName(String, FrameworkElement)

Localiza o elemento associado ao nome especificado definido dentro desse modelo.

(Herdado de FrameworkTemplate)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
LoadContent()

Carrega o conteúdo do modelo como uma instância de um objeto e retorna o elemento raiz do conteúdo.

(Herdado de FrameworkTemplate)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
RegisterName(String, Object)

Registra um novo par de nome/objeto no escopo do nome atual.

(Herdado de FrameworkTemplate)
Seal()

Bloqueia o modelo para que ele não possa ser alterado.

(Herdado de FrameworkTemplate)
ShouldSerializeResources(XamlDesignerSerializationManager)

Retorna um valor que indica se os processos de serialização devem serializar o valor da propriedade Resources em instâncias dessa classe.

(Herdado de FrameworkTemplate)
ShouldSerializeVisualTree()

Retorna um valor que indica se os processos de serialização devem serializar o valor da propriedade VisualTree em instâncias dessa classe.

(Herdado de FrameworkTemplate)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
UnregisterName(String)

Remove um mapeamento de nome/objeto do namescope XAML.

(Herdado de FrameworkTemplate)
ValidateTemplatedParent(FrameworkElement)

Verifica o pai modelo em relação a um conjunto de regras.

VerifyAccess()

Impõe que o thread de chamada tenha acesso a esse DispatcherObject.

(Herdado de DispatcherObject)

Implantações explícitas de interface

INameScope.FindName(String)

Retorna um objeto que tem o nome de identificação fornecido.

(Herdado de FrameworkTemplate)
IQueryAmbient.IsAmbientPropertyAvailable(String)

Consulta se uma propriedade ambiente especificada está disponível no escopo atual.

(Herdado de FrameworkTemplate)

Aplica-se a

Confira também