Share via


ControlTemplate Třída

Definice

Určuje vizuální strukturu a aspekty chování objektu Control , který lze sdílet mezi více 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

V následujícím příkladu je zobrazena ButtonStyle vlastnost , která nastaví ControlTemplate parametr 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>

Když se to použije, zobrazí se Button jako Ellipse:

Button Control (Ovládací prvek tlačítka) Ukázka

Když nastavíte Template vlastnost objektu Control na novou ControlTemplate jako v předchozím příkladu, nahradíte celou šablonu. To, Button jak vypadá při fokusu nebo stisknutí, je součástí výchozího vzhledu tlačítka, které nahrazujete. Proto v závislosti na vašich potřebách můžete chtít do definice zadat, jak by mělo tlačítko vypadat, když je stisknuto, a tak dále, jak je uvedeno 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 uvedené. Kompletní ukázku najdete v tématu Styling with ControlTemplates Sample.For the Styleing with ControlTemplates Sample. Tato ukázka obsahuje příklady šablon ovládacích prvků pro mnoho ovládacích prvků a představuje nejlepší způsob, 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í ControlTemplate a autor aplikace může přepsat ControlTemplate , aby rekonstruovali vizuální strukturu ovládacího prvku.

Řízení šablon je jednou z mnoha funkcí, které nabízí model stylů a šablon WPF. Model stylů a šablon poskytuje 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 příklady a podrobnou diskuzi v tématu Styling a šablony .

Pokud píšete vlastní ovládací prvek, přečtěte si téma "Create 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ým způsobem, 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 třídy (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 bude podporovat vlastní model obsahu, často model, který podporuje více podřízených elementů.

VisualTreeNodeContents Jeden nebo více prvků, které dokončí zamýšlenou šablonu. Pokud element zvolený jako VisualTreeRootNode podporuje pouze jeden podřízený prvek, pak může být pouze jeden prvek deklarován jako VisualTreeNodeContents. Je také možné (i když neobvyklé) poskytnout textový obsah, pokud vybraný VisualTreeRootNode podporuje vlastnost textového obsahu.

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á přidruženou Dispatcher k tomuto DispatcherObject .

(Zděděno od DispatcherObject)
HasContent

Získá hodnotu, která označuje, zda má tato šablona 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 rozsahu 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á xaml uzly pro šablonu, když je šablona definována nebo použita zapisovatel.

(Zděděno od FrameworkTemplate)
Triggers

Získá kolekci TriggerBase objektů, které aplikují změny vlastností nebo provádět 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 rámci této šablony.

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

Slouží jako výchozí hashovací funkce.

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

Získá aktuální Type 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ří mělkou kopii aktuálního Objectsouboru .

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

Zaregistruje novou dvojici název/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řazený objekt podle sady pravidel.

VerifyAccess()

Vynutí, aby volající vlákno má přístup k tomuto DispatcherObject.

(Zděděno od DispatcherObject)

Explicitní implementace rozhraní

INameScope.FindName(String)

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

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

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

(Zděděno od FrameworkTemplate)

Platí pro

Viz také