ControlTemplate Třída

Definice

Určuje vizuální strukturu a aspekty Control chování ovládacího prvku, které lze sdílet napříč několika instancemi ovládacího prvku.

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
Dědičnost
Atributy

Příklady

Následující příklad ukazuje Button Style, že nastaví :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>

Při použití Button se zobrazí jako :Ellipse

Button ControlTemplate sample

Když nastavíte Template vlastnost Control na nový ControlTemplate jako v předchozím příkladu, nahradíte celou šablonu. Button Jak vypadá, když je fokus nebo stisknutá, je všechna část výchozího vzhledu tlačítka, které nahrazujete. Proto v závislosti na vašich potřebách můžete chtít vložit definici, jak má tlačítko vypadat, když je stisknuto, a tak dále, jako v následujícím příkladu:

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

Všimněte si, že tento příklad odkazuje na prostředky, které zde nejsou zobrazeny. Kompletní ukázku naleznete v tématu Styling with ControlTemplates Sample. Tato ukázka obsahuje příklady řídicích šablon pro mnoho ovládacích prvků a je nejlepším způsobem, jak začít vytvářet šablony ovládacích prvků.

Poznámky

Umožňuje ControlTemplate určit vizuální strukturu ovládacího prvku. Autor ovládacího prvku může definovat výchozí nastavení ControlTemplate a autor aplikace může přepsat ControlTemplate , aby rekonstruovat vizuální strukturu ovládacího prvku.

Ovládací šablonování je jednou z mnoha funkcí nabízených stylováním a šablonovacím modelem WPF. Model stylů a šablon nabízí takovou flexibilitu, že v mnoha případech nemusíte psát vlastní ovládací prvky. Pokud jste autor aplikace, který chce změnit vizualizaci ovládacího prvku nebo nahradit ControlTemplate existující ovládací prvek, podívejte se na téma Styling a šablony , kde najdete příklady a podrobnou diskuzi.

Pokud píšete vlastní ovládací prvek, přečtěte si téma Vytvoření vlastního ovládacího prvku v přehledu vytváření ovládacích prvků.

A ControlTemplate je určena jako samostatná jednotka podrobností implementace, která je neviditelná pro vnější uživatele a objekty, včetně stylů. Jediný způsob, jak manipulovat s obsahem šablony ovládacího prvku, je ze stejné šablony ovládacího prvku.

Použití elementu vlastnosti XAML

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

Hodnoty XAML

Controltemplate
Object element pro ControlTemplate nebo odvozenou třídu.

VisualTreeRootNode
Jeden element XAML jako bezprostřední podřízený prvek ControlTemplate (nebo odvozené třídy). Šablony musí mít jeden kořenový uzel. Aby bylo možné vygenerovat užitečnou šablonu, očekává se, že element zvolený jako VisualTreeRootNode podporuje model obsahu svého vlastního, často modelu, který podporuje více podřízených prvků.

VisualTreeNodeContents
Jeden nebo více prvků, které dokončí zamýšlenou šablonu. Pokud element zvolený jako VisualTreeRootNode podporuje pouze jednu podřízenou položku, může existovat pouze jeden prvek deklarovaný jako VisualTreeNodeContents. Pokud zvolený VisualTreeRootNode podporuje vlastnost textového obsahu, je také možné (i když neobvyklé) poskytnout textový obsah.

Konstruktory

ControlTemplate()

Inicializuje novou instanci ControlTemplate třídy.

ControlTemplate(Type)

Inicializuje novou instanci ControlTemplate třídy se zadaným cílovým typem.

Vlastnosti

Dispatcher

Získá to DispatcherObject je přidruženoDispatcher.

(Zděděno od DispatcherObject)
HasContent

Získá hodnotu, která označuje, zda tato šablona má optimalizovaný obsah.

(Zděděno od FrameworkTemplate)
IsSealed

Získá hodnotu, která označuje, zda je tento objekt v neměnném stavu, takže jej nelze změnit.

(Zděděno od FrameworkTemplate)
Resources

Získá nebo nastaví kolekci prostředků, které lze použít v rámci oboru této šablony.

(Zděděno od FrameworkTemplate)
TargetType

Získá nebo nastaví typ, pro který je určen ControlTemplate .

Template

Získá nebo nastaví odkaz na objekt, který zaznamenává nebo přehrává uzly XAML pro šablonu, když je šablona definována nebo použita zapisovačem.

(Zděděno od FrameworkTemplate)
Triggers

Získá kolekci TriggerBase objektů, které používají změny vlastností nebo provádějí akce na základě zadaných podmínek.

VisualTree

Získá nebo nastaví kořenový uzel šablony.

(Zděděno od FrameworkTemplate)

Metody

CheckAccess()

Určuje, zda má volající vlákno přístup k tomuto DispatcherObject.

(Zděděno od DispatcherObject)
Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
FindName(String, FrameworkElement)

Vyhledá prvek přidružený k zadanému názvu definovanému v této šabloně.

(Zděděno od FrameworkTemplate)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Type Získá aktuální instanci.

(Zděděno od Object)
LoadContent()

Načte obsah šablony jako instanci objektu a vrátí kořenový prvek obsahu.

(Zděděno od FrameworkTemplate)
MemberwiseClone()

Vytvoří použádnou kopii aktuálního souboru Object.

(Zděděno od Object)
RegisterName(String, Object)

Zaregistruje novou dvojici názvů a objektů do aktuálního oboru názvů.

(Zděděno od FrameworkTemplate)
Seal()

Uzamkne šablonu, aby ji nebylo možné změnit.

(Zděděno od FrameworkTemplate)
ShouldSerializeResources(XamlDesignerSerializationManager)

Vrátí hodnotu, která označuje, zda serializační procesy mají serializovat hodnotu Resources vlastnosti na instancích této třídy.

(Zděděno od FrameworkTemplate)
ShouldSerializeVisualTree()

Vrátí hodnotu, která označuje, zda serializační procesy mají serializovat hodnotu VisualTree vlastnosti na instancích této třídy.

(Zděděno od FrameworkTemplate)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
UnregisterName(String)

Odebere mapování názvu nebo objektu z oboru názvů XAML.

(Zděděno od FrameworkTemplate)
ValidateTemplatedParent(FrameworkElement)

Zkontroluje nadřazenou šablonu pro sadu pravidel.

VerifyAccess()

Vynucuje, aby volající vlákno má k tomuto DispatcherObjectpřístupu přístup .

(Zděděno od DispatcherObject)

Explicitní implementace rozhraní

INameScope.FindName(String)

Vrátí objekt, který má zadaný název identifikace.

(Zděděno od FrameworkTemplate)
IQueryAmbient.IsAmbientPropertyAvailable(String)

Dotazuje, zda je zadaná okolí vlastnost k dispozici v aktuálním oboru.

(Zděděno od FrameworkTemplate)

Platí pro

Viz také