ControlTemplate Klasa

Definicja

Określa strukturę wizualizacji i aspekty behawioralne elementu Control , które mogą być współużytkowane przez wiele wystąpień kontrolki.

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

Przykłady

Poniżej przedstawiono element , który Button Style ustawia element typu ControlTemplate 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>

Po zastosowaniu tego polecenia element Button jest wyświetlany jako :Ellipse

Przykład ControlTemplate przycisku

Po ustawieniu Template właściwości elementu Control na nowy ControlTemplate , jak w powyższym przykładzie, zastępujesz cały szablon. To, jak wygląda, Button gdy znajduje się w fokusie lub naciśnięciu, jest częścią domyślnego wyglądu przycisku, który zastępujesz. W związku z tym, w zależności od potrzeb, możesz umieścić w definicji, jak powinien wyglądać przycisk po naciśnięciu i tak dalej, jak w poniższym przykładzie:

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

Zwróć uwagę, że w tym przykładzie odwołuje się do zasobów, które nie są tutaj wyświetlane. Kompletny przykład można znaleźć w temacie Styling with ControlTemplates Sample (Styling with ControlTemplates Sample( Styling with ControlTemplates Sample (Styling with ControlTemplates Sample). Ten przykład zawiera przykłady szablonów kontrolek dla wielu kontrolek i jest najlepszym sposobem na rozpoczęcie tworzenia szablonów kontrolek.

Uwagi

Element ControlTemplate umożliwia określenie struktury wizualnej kontrolki. Autor kontrolki może zdefiniować wartość domyślną ControlTemplate , a autor aplikacji może zastąpić ControlTemplate element , aby odtworzyć strukturę wizualną kontrolki.

Tworzenie szablonów sterujących jest jedną z wielu funkcji oferowanych przez model stylów I szablonów WPF. Model tworzenia stylów i tworzenia szablonów zapewnia tak dużą elastyczność, że w wielu przypadkach nie trzeba pisać własnych kontrolek. Jeśli jesteś autorem aplikacji, który chce zmienić wizualizację kontrolki lub zastąpić ControlTemplate istniejącą kontrolkę, zobacz temat Styling and Templating (Stylowanie i tworzenie szablonów ), aby zapoznać się z przykładami i szczegółową dyskusją.

Jeśli piszesz własną kontrolkę, zobacz sekcję "Tworzenie kontrolki niestandardowej" w temacie Omówienie tworzenia kontrolek.

Element ControlTemplate jest przeznaczony do samodzielnej jednostki szczegółów implementacji, która jest niewidoczna dla użytkowników i obiektów zewnętrznych, w tym stylów. Jedynym sposobem manipulowania zawartością szablonu kontrolki jest z poziomu tego samego szablonu kontrolki.

Użycie elementu właściwości języka XAML

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

Wartości XAML

Controltemplate
Element obiektu dla ControlTemplate klasy pochodnej lub .

VisualTreeRootNode
Pojedynczy element XAML jako bezpośredni element podrzędny ControlTemplate klasy (lub klasy pochodnej). Szablony muszą mieć jeden węzeł główny. Aby wygenerować przydatny szablon, oczekuje się, że element wybrany jako VisualTreeRootNode będzie obsługiwał własny model zawartości, często model obsługujący wiele elementów podrzędnych.

VisualTreeNodeContents
Co najmniej jeden element, który ukończy zamierzony szablon. Jeśli element wybrany jako VisualTreeRootNode obsługuje tylko jeden element podrzędny, może istnieć tylko jeden element zadeklarowany jako VisualTreeNodeContents. Istnieje również możliwość (choć nietypowa) podania zawartości tekstowej, jeśli wybrany element VisualTreeRootNode obsługuje właściwość zawartości tekstowej.

Konstruktory

ControlTemplate()

Inicjuje nowe wystąpienie klasy ControlTemplate.

ControlTemplate(Type)

Inicjuje ControlTemplate nowe wystąpienie klasy o określonym typie docelowym.

Właściwości

Dispatcher

Dispatcher Pobiera tę DispatcherObject wartość skojarzona z.

(Odziedziczone po DispatcherObject)
HasContent

Pobiera wartość wskazującą, czy ten szablon ma zoptymalizowaną zawartość.

(Odziedziczone po FrameworkTemplate)
IsSealed

Pobiera wartość wskazującą, czy ten obiekt jest w stanie niezmiennym, więc nie można go zmienić.

(Odziedziczone po FrameworkTemplate)
Resources

Pobiera lub ustawia kolekcję zasobów, które mogą być używane w zakresie tego szablonu.

(Odziedziczone po FrameworkTemplate)
TargetType

Pobiera lub ustawia typ, dla którego jest to ControlTemplate zamierzone.

Template

Pobiera lub ustawia odwołanie do obiektu, który rejestruje lub odtwarza węzły XAML dla szablonu, gdy szablon jest zdefiniowany lub stosowany przez moduł zapisywania.

(Odziedziczone po FrameworkTemplate)
Triggers

Pobiera kolekcję TriggerBase obiektów, które stosują zmiany właściwości lub wykonują akcje na podstawie określonych warunków.

VisualTree

Pobiera lub ustawia węzeł główny szablonu.

(Odziedziczone po FrameworkTemplate)

Metody

CheckAccess()

Określa, czy wątek wywołujący ma dostęp do tego DispatcherObjectelementu .

(Odziedziczone po DispatcherObject)
Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
FindName(String, FrameworkElement)

Znajduje element skojarzony z określoną nazwą zdefiniowaną w tym szablonie.

(Odziedziczone po FrameworkTemplate)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
LoadContent()

Ładuje zawartość szablonu jako wystąpienie obiektu i zwraca element główny zawartości.

(Odziedziczone po FrameworkTemplate)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
RegisterName(String, Object)

Rejestruje nową parę nazw/obiektów w bieżącym zakresie nazw.

(Odziedziczone po FrameworkTemplate)
Seal()

Blokuje szablon, aby nie można go było zmienić.

(Odziedziczone po FrameworkTemplate)
ShouldSerializeResources(XamlDesignerSerializationManager)

Zwraca wartość wskazującą, czy procesy serializacji powinny serializować wartość Resources właściwości w wystąpieniach tej klasy.

(Odziedziczone po FrameworkTemplate)
ShouldSerializeVisualTree()

Zwraca wartość wskazującą, czy procesy serializacji powinny serializować wartość VisualTree właściwości w wystąpieniach tej klasy.

(Odziedziczone po FrameworkTemplate)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)
UnregisterName(String)

Usuwa mapowanie nazw/obiektów z zakresu nazw XAML.

(Odziedziczone po FrameworkTemplate)
ValidateTemplatedParent(FrameworkElement)

Sprawdza szablon elementu nadrzędnego względem zestawu reguł.

VerifyAccess()

Wymusza, że wątek wywołujący ma dostęp do tego DispatcherObjectelementu .

(Odziedziczone po DispatcherObject)

Jawne implementacje interfejsu

INameScope.FindName(String)

Zwraca obiekt, który ma podaną nazwę identyfikującą.

(Odziedziczone po FrameworkTemplate)
IQueryAmbient.IsAmbientPropertyAvailable(String)

Kwerenda, czy określona właściwość otoczenia jest dostępna w bieżącym zakresie.

(Odziedziczone po FrameworkTemplate)

Dotyczy

Zobacz też