(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original

ControlTemplate-Klasse

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

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.

  NameBeschreibung
Öffentliche MethodeControlTemplate()Initialisiert eine neue Instanz der ControlTemplate-Klasse.
Öffentliche MethodeControlTemplate(Type)Initialisiert eine neue Instanz der ControlTemplate-Klasse mit dem angegebenen Zieltyp.
Zum Seitenanfang

  NameBeschreibung
Öffentliche EigenschaftDispatcherRuft den Dispatcher ab, der diesem DispatcherObject zugeordnet ist. (Von DispatcherObject geerbt.)
Öffentliche EigenschaftHasContentRuft einen Wert ab, der angibt, ob diese Vorlage optimierten Inhalt aufweist. (Von FrameworkTemplate geerbt.)
Öffentliche EigenschaftIsSealedRuft einen Wert ab, der angibt, ob sich dieses Objekt in einem unveränderlichen Zustand befindet. (Von FrameworkTemplate geerbt.)
Öffentliche EigenschaftResourcesRuft die Auflistung von Ressourcen ab, die innerhalb des Bereichs dieser Vorlage verwendet werden können, oder legt sie fest. (Von FrameworkTemplate geerbt.)
Öffentliche EigenschaftTargetTypeRuft den Typ ab, für den dieses ControlTemplate vorgesehen ist, oder legt diesen fest.
Öffentliche EigenschaftTemplateRuft 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 EigenschaftTriggersRuft eine Auflistung von TriggerBase-Objekten ab, die Eigenschaftenänderungen anwenden oder in Abhängigkeit von festgelegten Bedingungen Aktionen durchführen.
Öffentliche EigenschaftVisualTreeRuft den Stammknoten der Vorlage ab oder legt diesen fest. (Von FrameworkTemplate geerbt.)
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeCheckAccessBestimmt, ob der aufrufende Thread auf dieses DispatcherObject zugreifen kann. (Von DispatcherObject geerbt.)
Öffentliche MethodeEquals(Object) Bestimmt, ob das übergegebene Object und das aktuelle Object gleich sind. (Von Object geerbt.)
Geschützte MethodeFinalize Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Von Object geerbt.)
Öffentliche MethodeFindNameSucht das Element, das mit dem angegebenen, in der Vorlage definierten Namen verknüpft ist. (Von FrameworkTemplate geerbt.)
Öffentliche MethodeGetHashCodeFungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.)
Öffentliche MethodeGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche MethodeLoadContentLädt den Inhalt der Vorlage als Instanz eines Objekts und gibt das Stammelement des Inhalts zurück. (Von FrameworkTemplate geerbt.)
Geschützte MethodeMemberwiseCloneErstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche MethodeRegisterNameRegistriert ein neues Name/Objekt-Paar im aktuellen Namescope. (Von FrameworkTemplate geerbt.)
Öffentliche MethodeSealSperrt die Vorlage, damit diese nicht geändert werden kann. (Von FrameworkTemplate geerbt.)
Öffentliche MethodeShouldSerializeResourcesGibt 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 MethodeShouldSerializeVisualTreeGibt 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 MethodeToStringGibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Öffentliche MethodeUnregisterNameEntfernt eine Name/Objekt-Zuordnung aus dem XAML-Namescope. (Von FrameworkTemplate geerbt.)
Geschützte MethodeValidateTemplatedParentVergleicht das auf Vorlagen basierende übergeordnete Element mit einer Reihe von Regeln. (Überschreibt FrameworkTemplate.ValidateTemplatedParent(FrameworkElement).)
Öffentliche MethodeVerifyAccessErzwingt, dass der aufrufende Thread auf dieses DispatcherObject zugreifen kann. (Von DispatcherObject geerbt.)
Zum Seitenanfang

  NameBeschreibung
Explizite SchnittstellenimplementierungPrivate MethodeINameScope.FindNameInfrastruktur. Gibt ein Objekt zurück, das den bereitgestellten kennzeichnenden Namen aufweist. (Von FrameworkTemplate geerbt.)
Explizite SchnittstellenimplementierungPrivate MethodeIQueryAmbient.IsAmbientPropertyAvailableFragt 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.

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft