ControlTemplate Klasa

Definicja

Określa strukturę wizualizacji i aspekty zachowania Control , które mogą być współużytkowane przez wiele wystąpień formantu.Specifies the visual structure and behavioral aspects of a Control that can be shared across multiple instances of the control.

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 Button Style , który ustawia ControlTemplate Button :The following shows a Button Style that sets the ControlTemplate of a 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>

Gdy ta opcja zostanie zastosowana, Button pojawia się jako Ellipse :When this gets applied, the Button appears as an Ellipse:

ControlTemplate Button — przykładButton ControlTemplate sample

Po ustawieniu Template Właściwości a Control na nową, ControlTemplate tak jak w powyższym przykładzie, zastępujesz cały szablon.When you set the Template property of a Control to a new ControlTemplate as in the above example, you are replacing the entire template. ButtonWygląd przycisku, który wygląda tak, gdy jest on skoncentrowany lub wciśnięty, jest częścią domyślnego wyglądu zastępowanego elementu.What the Button looks like when it is in focus or pressed is all part of the default appearance of the button that you are replacing. W związku z tym, w zależności od potrzeb, można umieścić w definicji, jak powinien wyglądać przycisk po naciśnięciu i tak dalej, jak w poniższym przykładzie:Therefore, depending on your needs, you may want to put in your definition what your button should look like when it is pressed, and so on, as in the following example:

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

Należy zauważyć, że ten przykład odwołuje się do zasobów, które nie są wyświetlane w tym miejscu.Note that this example references resources that are not shown here. Aby uzyskać pełny przykład, zobacz Style z przykładem elementy ControlTemplates.For the complete sample, see Styling with ControlTemplates Sample. Ten przykład zawiera przykłady szablonów formantów dla wielu formantów i jest najlepszym sposobem na rozpoczęcie tworzenia szablonów kontrolek.That sample provides examples of control templates for many controls and is the best way for you to get started with creating control templates.

Uwagi

ControlTemplateUmożliwia określenie struktury wizualizacji formantu.The ControlTemplate allows you to specify the visual structure of a control. Autor kontrolki może zdefiniować ustawienia domyślne ControlTemplate , a autor aplikacji może przesłonić, ControlTemplate Aby odtworzyć strukturę wizualizacji formantu.The control author can define the default ControlTemplate and the application author can override the ControlTemplate to reconstruct the visual structure of the control.

Tworzenia szablonów sterowania jest jedną z wielu funkcji oferowanych przez style WPF i model tworzenia szablonów.Control templating is one of the many features offered by the WPF styling and templating model. Model stylów i tworzenia szablonów zapewnia taką doskonałą elastyczność, w wielu przypadkach nie trzeba pisać własnych kontrolek.The styling and templating model provides you with such great flexibility that in many cases you do not need to write your own controls. Jeśli jesteś autorem aplikacji, który chce zmienić wizualizację formantu lub zastąpić ControlTemplate istniejący formant, zobacz temat Style i tworzenia szablonów tematu, aby poznać przykłady i szczegółowe omówienie.If you are an application author that wants to change the visualization of your control or to replace the ControlTemplate of an existing control, see the Styling and Templating topic for examples and an in-depth discussion.

Jeśli piszesz własny formant, zobacz "Tworzenie kontrolki niestandardowej" w przeglądzie tworzenia kontrolek.If you are writing your own control, see "Create a Custom Control" in the Control Authoring Overview.

A ControlTemplate ma być niezależną jednostką szczegółów implementacji, która jest niewidoczna dla użytkowników zewnętrznych i obiektów, w tym stylów.A ControlTemplate is intended to be a self-contained unit of implementation detail that is invisible to outside users and objects, including styles. Jedynym sposobem manipulowania zawartością szablonu formantu jest z tego samego szablonu kontrolki.The only way to manipulate the content of the control template is from within the same control template.

Użycie elementu właściwości języka XAMLXAML Property Element Usage

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

Wartości XAMLXAML Values

ControlTemplateControlTemplate
Element obiektu dla ControlTemplate lub klasy pochodnej.Object element for ControlTemplate or a derived class.

VisualTreeRootNodeVisualTreeRootNode
Pojedynczy element XAML jako bezpośrednim elementem podrzędnym ControlTemplate (lub klasy pochodnej).A single XAML element as the immediate child of the ControlTemplate (or a derived class). Szablony muszą mieć jeden węzeł główny.Templates must have a single root node. W celu wygenerowania przydatnego szablonu element wybrany jako VisualTreeRootNode powinien obsługiwać model zawartości własny, często model, który obsługuje wiele elementów podrzędnych.In order to generate a useful template, the element chosen as VisualTreeRootNode is expected to support a content model of its own, often a model that supports multiple child elements.

VisualTreeNodeContentsVisualTreeNodeContents
Co najmniej jeden element, który ukończył zamierzony szablon.One or more elements that complete the intended template. Jeśli element wybrany jako VisualTreeRootNode obsługuje tylko jeden element podrzędny, tylko jeden z nich jest zadeklarowany jako VisualTreeNodeContents.If the element chosen as VisualTreeRootNode only supports a single child, then there can only be one element declared as VisualTreeNodeContents. Istnieje również możliwość udostępnienia zawartości tekstowej, jeśli wybrana VisualTreeRootNode obsługuje Właściwość zawartości tekstowej.It is also possible (though uncommon) to provide text content if the chosen VisualTreeRootNode supports a text content property.

Konstruktory

ControlTemplate()

Inicjuje nowe wystąpienie klasy ControlTemplate.Initializes a new instance of the ControlTemplate class.

ControlTemplate(Type)

Inicjuje nowe wystąpienie ControlTemplate klasy o określonym typie docelowym.Initializes a new instance of the ControlTemplate class with the specified target type.

Właściwości

Dispatcher

Pobiera Dispatcher ten DispatcherObject program jest skojarzony z.Gets the Dispatcher this DispatcherObject is associated with.

(Odziedziczone po DispatcherObject)
HasContent

Pobiera wartość wskazującą, czy ten szablon ma zoptymalizowaną zawartość.Gets a value that indicates whether this template has optimized content.

(Odziedziczone po FrameworkTemplate)
IsSealed

Pobiera wartość wskazującą, czy ten obiekt jest w niezmiennym stanie, dlatego nie można go zmienić.Gets a value that indicates whether this object is in an immutable state so it cannot be changed.

(Odziedziczone po FrameworkTemplate)
Resources

Pobiera lub ustawia kolekcję zasobów, które mogą być używane w ramach zakresu tego szablonu.Gets or sets the collection of resources that can be used within the scope of this template.

(Odziedziczone po FrameworkTemplate)
TargetType

Pobiera lub ustawia typ, dla którego ControlTemplate jest przeznaczony.Gets or sets the type for which this ControlTemplate is intended.

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ł zapisujący.Gets or sets a reference to the object that records or plays the XAML nodes for the template when the template is defined or applied by a writer.

(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.Gets a collection of TriggerBase objects that apply property changes or perform actions based on specified conditions.

VisualTree

Pobiera lub ustawia węzeł główny szablonu.Gets or sets the root node of the template.

(Odziedziczone po FrameworkTemplate)

Metody

CheckAccess()

Określa, czy wątek wywołujący ma dostęp do tego DispatcherObject .Determines whether the calling thread has access to this DispatcherObject.

(Odziedziczone po DispatcherObject)
Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
FindName(String, FrameworkElement)

Znajduje element skojarzony z określoną nazwą zdefiniowaną w ramach tego szablonu.Finds the element associated with the specified name defined within this template.

(Odziedziczone po FrameworkTemplate)
GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Odziedziczone po Object)
GetType()

Pobiera Type bieżące wystąpienie.Gets the Type of the current instance.

(Odziedziczone po Object)
LoadContent()

Ładuje zawartość szablonu jako wystąpienie obiektu i zwraca element główny zawartości.Loads the content of the template as an instance of an object and returns the root element of the content.

(Odziedziczone po FrameworkTemplate)
MemberwiseClone()

Tworzy skróconą kopię bieżącego elementu Object .Creates a shallow copy of the current Object.

(Odziedziczone po Object)
RegisterName(String, Object)

Rejestruje nową parę nazw/obiektów w bieżącym zakresie nazw.Registers a new name/object pair into the current name scope.

(Odziedziczone po FrameworkTemplate)
Seal()

Blokuje szablon, dlatego nie można go zmienić.Locks the template so it cannot be changed.

(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.Returns a value that indicates whether serialization processes should serialize the value of the Resources property on instances of this class.

(Odziedziczone po FrameworkTemplate)
ShouldSerializeVisualTree()

Zwraca wartość wskazującą, czy procesy serializacji powinny serializować wartość VisualTree właściwości w wystąpieniach tej klasy.Returns a value that indicates whether serialization processes should serialize the value of the VisualTree property on instances of this class.

(Odziedziczone po FrameworkTemplate)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.Returns a string that represents the current object.

(Odziedziczone po Object)
UnregisterName(String)

Usuwa mapowanie nazw/obiektów z namescope XAML.Removes a name/object mapping from the XAML namescope.

(Odziedziczone po FrameworkTemplate)
ValidateTemplatedParent(FrameworkElement)

Sprawdza szablon nadrzędny względem zestawu reguł.Checks the templated parent against a set of rules.

VerifyAccess()

Wymusza, że wątek wywołujący ma dostęp do tego DispatcherObject .Enforces that the calling thread has access to this DispatcherObject.

(Odziedziczone po DispatcherObject)

Jawne implementacje interfejsu

INameScope.FindName(String)

Zwraca obiekt, który ma podaną nazwę identyfikującą.Returns an object that has the provided identifying name.

(Odziedziczone po FrameworkTemplate)
IQueryAmbient.IsAmbientPropertyAvailable(String)

Pyta, czy określona właściwość otoczenia jest dostępna w bieżącym zakresie.Queries whether a specified ambient property is available in the current scope.

(Odziedziczone po FrameworkTemplate)

Dotyczy

Zobacz też