Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

ControlTemplate-Klasse

Gibt die visuelle Struktur und Verhaltensaspekte eines Control an, das für mehrere Instanzen des Steuerelements gemeinsam verwendet werden kann.

System.Object
  System.Windows.Threading.DispatcherObject
    System.Windows.FrameworkTemplate
      System.Windows.Controls.ControlTemplate

Namespace:  System.Windows.Controls
Assembly:  PresentationFramework (in PresentationFramework.dll)
XMLNS für XAML: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation
[DictionaryKeyPropertyAttribute("TargetType")]
[LocalizabilityAttribute(LocalizationCategory.None, Readability = Readability.Unreadable)]
public class ControlTemplate : FrameworkTemplate
<ControlTemplate>
  <VisualTreeRootNode>
VisualTreeNodeContents
  </VisualTreeRootNode>
</ControlTemplate>

XAML-Werte

ControlTemplate

Objektelement für ControlTemplate oder eine abgeleitete Klasse.

VisualTreeRootNode

Ein einzelnes XAML-Element als unmittelbar untergeordnetes Element der ControlTemplate-(oder eine abgeleiteten Klasse). Vorlagen müssen einen einzelnen Stammknoten aufweisen. Um eine hilfreiche Vorlage zu erzeugen, muss das als VisualTreeRootNode ausgewählte Element ein eigenes Inhaltsmodell unterstützten; dabei handelt es sich oft um ein Modell, das mehrere untergeordnete Elemente unterstützt.

VisualTreeNodeContents

Eines oder mehrere Elemente, die die vorgesehene Vorlage vervollständigen. Wenn das als VisualTreeRootNode ausgewählte Element nur ein untergeordnetes Element unterstützt, kann nur ein Element als VisualTreeNodeContents deklariert werden. Ferner ist es möglich (wenn auch ungewöhnlich), Textinhalt bereitzustellen, wenn der ausgewählte VisualTreeRootNode eine entsprechende Eigenschaft unterstützt.

Der ControlTemplate-Typ macht die folgenden Member verfügbar.

  Name Beschreibung
Öffentliche Methode ControlTemplate() Initialisiert eine neue Instanz der ControlTemplate-Klasse.
Öffentliche Methode ControlTemplate(Type) Initialisiert eine neue Instanz der ControlTemplate-Klasse mit dem angegebenen Zieltyp.
Zum Seitenanfang
  Name Beschreibung
Öffentliche Eigenschaft Dispatcher Ruft den Dispatcher ab, der diesem DispatcherObject zugeordnet ist. (Von DispatcherObject geerbt.)
Öffentliche Eigenschaft HasContent Ruft einen Wert ab, der angibt, ob diese Vorlage optimierten Inhalt aufweist. (Von FrameworkTemplate geerbt.)
Öffentliche Eigenschaft IsSealed Ruft einen Wert ab, der angibt, ob sich dieses Objekt in einem unveränderlichen Zustand befindet. (Von FrameworkTemplate geerbt.)
Öffentliche Eigenschaft Resources Ruft die Auflistung von Ressourcen ab, die innerhalb des Bereichs dieser Vorlage verwendet werden können, oder legt sie fest. (Von FrameworkTemplate geerbt.)
Öffentliche Eigenschaft TargetType Ruft den Typ ab, für den dieses ControlTemplate vorgesehen ist, oder legt diesen fest.
Öffentliche Eigenschaft Template Ruft einen Verweis auf das Objekt ab, das die XAML-Knoten für die Vorlage aufzeichnet oder wiedergibt, wenn die Vorlage von einem Writer definiert oder angewendet wird, oder legt diesen Verweis fest. (Von FrameworkTemplate geerbt.)
Öffentliche Eigenschaft Triggers Ruft eine Auflistung von TriggerBase-Objekten ab, die Eigenschaftenänderungen anwenden oder in Abhängigkeit von festgelegten Bedingungen Aktionen durchführen.
Öffentliche Eigenschaft VisualTree Ruft den Stammknoten der Vorlage ab oder legt diesen fest. (Von FrameworkTemplate geerbt.)
Zum Seitenanfang
  Name Beschreibung
Öffentliche Methode CheckAccess Bestimmt, ob der aufrufende Thread auf dieses DispatcherObject zugreifen kann. (Von DispatcherObject geerbt.)
Öffentliche Methode Equals(Object) Bestimmt, ob das angegebene Object und das aktuelle Object gleich sind. (Von Object geerbt.)
Geschützte Methode Finalize Gibt einem Objekt Gelegenheit zu dem Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der automatische Speicherbereinigung freigegeben wird. (Von Object geerbt.)
Öffentliche Methode FindName Sucht das Element, das mit dem angegebenen, in der Vorlage definierten Namen verknüpft ist. (Von FrameworkTemplate geerbt.)
Öffentliche Methode GetHashCode Fungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.)
Öffentliche Methode GetType Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche Methode LoadContent Lädt den Inhalt der Vorlage als Instanz eines Objekts und gibt das Stammelement des Inhalts zurück. (Von FrameworkTemplate geerbt.)
Geschützte Methode MemberwiseClone Erstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche Methode RegisterName Registriert ein neues Name/Objekt-Paar im aktuellen Namescope. (Von FrameworkTemplate geerbt.)
Öffentliche Methode Seal Sperrt die Vorlage, damit diese nicht geändert werden kann. (Von FrameworkTemplate geerbt.)
Öffentliche Methode ShouldSerializeResources Gibt einen Wert zurück, mit dem angegeben wird, ob Serialisierungsprozesse den Wert der Resources-Eigenschaft für Instanzen dieser Klasse serialisieren sollen. (Von FrameworkTemplate geerbt.)
Öffentliche Methode ShouldSerializeVisualTree Gibt einen Wert zurück, mit dem angegeben wird, ob Serialisierungsprozesse den Wert der VisualTree-Eigenschaft für Instanzen dieser Klasse serialisieren sollen. (Von FrameworkTemplate geerbt.)
Öffentliche Methode ToString Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Öffentliche Methode UnregisterName Entfernt eine Name/Objekt-Zuordnung aus dem XAML-Namescope. (Von FrameworkTemplate geerbt.)
Geschützte Methode ValidateTemplatedParent Vergleicht das auf Vorlagen basierende übergeordnete Element mit einer Reihe von Regeln. (Überschreibt FrameworkTemplate.ValidateTemplatedParent(FrameworkElement).)
Öffentliche Methode VerifyAccess Erzwingt, dass der aufrufende Thread auf dieses DispatcherObject zugreifen kann. (Von DispatcherObject geerbt.)
Zum Seitenanfang
  Name Beschreibung
Explizite Schnittstellenimplementierung Private Methode INameScope.FindName Infrastruktur. Gibt ein Objekt zurück, das den bereitgestellten kennzeichnenden Namen aufweist. (Von FrameworkTemplate geerbt.)
Explizite Schnittstellenimplementierung Private Methode IQueryAmbient.IsAmbientPropertyAvailable Fragt ab, ob eine angegebene Ambient-Eigenschaft im aktuellen Bereich verfügbar ist. (Von FrameworkTemplate geerbt.)
Zum Seitenanfang

Mit dem ControlTemplate können Sie die visuelle Struktur eines Steuerelements angeben. Der Steuerelemententwickler kann das standardmäßige ControlTemplate definieren, und der Anwendungsentwickler kann das ControlTemplate überschreiben, um die visuelle Struktur des Steuerelements wiederherzustellen.

Steuerelementvorlagen sind eines der vielen Features, das vom WPF-Formatierungs- und Vorlagenmodell verfügbar gemacht wird. Das Formatierungs- und Vorlagenmodell bietet Ihnen solch ein hohes Maß an Flexibilität, dass Sie in vielen Fällen keine eigenen Steuerelemente schreiben müssen. Wenn Sie als Anwendungsentwickler die Darstellung des Steuerelements ändern oder das ControlTemplate eines vorhandenen Steuerelements ersetzen möchten, finden Sie im Thema Erstellen von Formaten und Vorlagen Beispiele sowie eine ausführliche Erläuterung.

Weitere Informationen zum Schreiben eigener Steuerelemente finden Sie in Übersicht über das Erstellen von Steuerelementen unter "Erstellen eines benutzerdefinierten Steuerelements".

Ein ControlTemplate sollte eine unabhängige Einheit der Implementierung sein, die für externe Benutzer und Objekte und auch für Formate nicht sichtbar ist. Der Inhalt der Steuerelementvorlage kann nur in derselben Steuerelementvorlage geändert werden.

Im Folgenden wird ein Button-Style veranschaulicht, der das ControlTemplate eines Button festlegt:


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


Wenn dies zur Anwendung kommt, wird Button als Ellipse angezeigt:

Beispiel für Button-ControlTemplate

Wenn Sie die Template-Eigenschaft eines Control (wie im obigen Beispiel) auf ein neues ControlTemplate festlegen, wird die gesamte Vorlage ersetzt. Das Aussehen des Button, wenn er den Fokus besitzt oder gedrückt wird, gehört zur Standarddarstellung der Schaltfläche, die ersetzt wird. Daher empfiehlt es sich ggf. das Aussehen der Schaltfläche im gedrückten Zustand usw. in die Definition aufzunehmen, wie im folgenden Beispiel veranschaulicht:


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


Beachten Sie, dass in diesem Beispiel auf Ressourcen verwiesen wird, die hier nicht angezeigt werden. Das vollständige Beispiel finden Sie unter Styling with ControlTemplates Sample. Im Folgenden finden Sie Beispiele für Steuerelementvorlagen für viele Steuerelemente. Diese empfehlen sich als Einstieg in das Erstellen von Steuerelementvorlagen.

.NET Framework

Unterstützt in: 4, 3.5, 3.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Community-Inhalt Hinzufügen
Anmerkungen FAQ