Freigeben über


ControlTemplate Klasse

Definition

Definiert die Elementstruktur, die als Steuerelementvorlage für ein Steuerelement verwendet wird.

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>
Vererbung
Object Platform::Object IInspectable DependencyObject FrameworkTemplate ControlTemplate
Attribute

Beispiele

Im folgenden Beispiel wird eine einfache ControlTemplate für eine Schaltfläche erstellt. Die Steuerelementvorlage enthält ein Raster und gibt dieses Verhalten an:

  • Wenn der Benutzer die Maus über die Schaltfläche setzt, wechselt das Raster innerhalb einer halben Sekunde von grün in rot.
  • Wenn der Benutzer die Maus von der Schaltfläche entfernt, wechselt das Raster sofort wieder in grün.
<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>

Die vollständige Vorlage für jedes XAML-Steuerelement wird in der Datei generic.xaml angezeigt. Diese Datei befindet sich im Ordner (Programme)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP<SDK version>\Generic.

Hinweise

Weitere Informationen und Beispiele finden Sie unter XAML-Steuerelementvorlagen.

ControlTemplate wird als Wert der Control.Template-Eigenschaft verwendet, die die Visuals eines Steuerelements durch Anwenden der Vorlage definiert. Sie definieren eine ControlTemplate fast immer als XAML-Ressource, indem Sie einen impliziten TargetType-Schlüssel verwenden, der mit einem Style identisch ist, der Control.Template mit einem Setter festlegt. Sie weisen nur selten einen Wert für Control.Template direkt auf einem Steuerelement instance zu.

Es gibt wirklich nur zwei Eigenschaften, die Sie beim Definieren einer ControlTemplate verwenden: den TargetType und den impliziten XAML-Inhalt. ControlTemplate erbt das implizite XAML-Inhaltsverhalten vom übergeordneten FrameworkTemplate-Element . Im Grunde weist das in einer ControlTemplate enthaltene Element, wie in XAML definiert, ein Stammelement für eine weitere Struktur von XAML-Elementen zu, die die Vorlage definieren. Dies ist das Festlegen einer "Template"-Eigenschaft, die anschließend nicht vom Code untersucht werden kann und nur eine Bedeutung dafür hat, wie der XAML-Parser Basierend auf der Anwendung dieser Vorlage Inhalt für Steuerelemente zuweist.

Damit der Inhalt aus einer ControlTemplate festgelegt werden kann, muss ein Steuerelementelement eine echte Control-Unterklasse sein, sodass es über die Control.Template-Eigenschaft verfügt. Es gibt andere Fälle, in denen Vorlagen Inhalte anwenden, aber dies umfasst in der Regel eine der anderen von FrameworkTemplate abgeleiteten Vorlagenklassen (DataTemplate oder ItemsPanelTemplate).

Steuerelementvorlagen stellen die Visuals und Teile bereit, aus denen ein instance eines Steuerelements besteht, wie es auf der Benutzeroberfläche einer App angezeigt wird. Zur Laufzeit wurde die Vorlage bereits angewendet, sodass alle Teile, die aus der Vorlage erstellt wurden, nun wirklich Teile des Steuerelements sind und mit Techniken wie dem Untersuchen der XAML-Namescopes innerhalb des Steuerelementinhalts oder mithilfe der VisualTreeHelper-Klasse zugegriffen werden kann. Ereignisse wie die Eingabeereignisse machen manchmal die Teile eines Steuerelements verfügbar, die aus der angewendeten Steuerelementvorlage stammen.

Es gibt Möglichkeiten, vor oder nachdem die Vorlage auf ein bestimmtes Steuerelement instance angewendet wurde, auf vorlagendefinierte Inhalte zuzugreifen. Weitere Informationen finden Sie unter OnApplyTemplate oder GetTemplateChild.

Der tatsächliche Zeitpunkt, zu dem eine ControlTemplate auf ein Steuerelement angewendet wird, instance kann erkannt werden, da dadurch die durch OnApplyTemplate geschützte virtuelle Methode aufgerufen wird. Solange das Steuerelement nicht versiegelt ist, können Sie ein Steuerelement unterklassen, sodass Sie die Möglichkeit haben, OnApplyTemplate zu überschreiben. Diese Außerkraftsetzung kann geschrieben werden, um Aktionen auszuführen, die vor dem Anwenden der Vorlage nicht möglich wären. Beispielsweise können Sie Ereignishandler mit Steuerelementteilen verknüpfen oder Steuerelementeigenschaften festlegen, um auf Objektteile zu verweisen, die aus der Vorlage erstellt wurden, aber nicht mit einem {TemplateBinding}-Markuperweiterungswert begonnen haben.

Konstruktoren

ControlTemplate()

Initialisiert eine neue instance der ControlTemplate-Klasse.

Eigenschaften

Dispatcher

Gibt immer in einer Windows App SDK-App zurücknull. Verwenden Sie stattdessen DispatcherQueue .

(Geerbt von DependencyObject)
DispatcherQueue

Ruft den DispatcherQueue ab, dem dieses Objekt zugeordnet ist. Stellt DispatcherQueue eine Funktion dar, die auf den DependencyObject im UI-Thread zugreifen kann, auch wenn der Code von einem Nicht-UI-Thread initiiert wird.

(Geerbt von DependencyObject)
TargetType

Ruft den Typ ab, auf den die ControlTemplate angewendet wird, oder legt diesen fest.

Methoden

ClearValue(DependencyProperty)

Löscht den lokalen Wert einer Abhängigkeitseigenschaft.

(Geerbt von DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Gibt einen beliebigen Basiswert zurück, der für eine Abhängigkeitseigenschaft eingerichtet wurde, der in Fällen gilt, in denen eine Animation nicht aktiv ist.

(Geerbt von DependencyObject)
GetValue(DependencyProperty)

Gibt den aktuellen effektiven Wert einer Abhängigkeitseigenschaft aus einem DependencyObject zurück.

(Geerbt von DependencyObject)
ReadLocalValue(DependencyProperty)

Gibt den lokalen Wert einer Abhängigkeitseigenschaft zurück, wenn ein lokaler Wert festgelegt ist.

(Geerbt von DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Registriert eine Benachrichtigungsfunktion zum Lauschen auf Änderungen an einer bestimmten DependencyProperty für dieses DependencyObject-instance.

(Geerbt von DependencyObject)
SetValue(DependencyProperty, Object)

Legt den lokalen Wert einer Abhängigkeitseigenschaft für ein DependencyObject fest.

(Geerbt von DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Bricht eine Änderungsbenachrichtigung ab, die zuvor durch Aufrufen von RegisterPropertyChangedCallback registriert wurde.

(Geerbt von DependencyObject)

Gilt für:

Weitere Informationen