ControlTemplate Klass

Definition

Anger den visuella strukturen och beteendeaspekterna för en Control som kan delas mellan flera instanser av kontrollen.

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

Exempel

Följande visar en ButtonStyle som anger ControlTemplate för en 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>

När detta tillämpas visas som Button :Ellipse

KnappkontrollMallexempel

När du anger Template egenskapen för en till en Control ny ControlTemplate som i exemplet ovan ersätter du hela mallen. Hur det Button ser ut när det är i fokus eller trycks är en del av standardutseendet för knappen som du ersätter. Beroende på dina behov kanske du därför vill ange hur din knapp ska se ut när den trycks ned, och så vidare, som i följande exempel:

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

Observera att det här exemplet refererar till resurser som inte visas här. Det fullständiga exemplet finns i Styling with ControlTemplates Sample. Det exemplet innehåller exempel på kontrollmallar för många kontroller och är det bästa sättet för dig att komma igång med att skapa kontrollmallar.

Kommentarer

Med ControlTemplate kan du ange den visuella strukturen för en kontroll. Kontrollförfattaren kan definiera standardvärdet ControlTemplate och programförfattaren kan åsidosätta ControlTemplate för att rekonstruera kontrollens visuella struktur.

Kontroll templating är en av de många funktioner som erbjuds av WPF formatering och templating modell. Formaterings- och mallmodellen ger dig så stor flexibilitet att du i många fall inte behöver skriva egna kontroller. Om du är programförfattare och vill ändra visualiseringen av kontrollen eller ersätta en ControlTemplate befintlig kontroll kan du se avsnittet Formatering och mallning för exempel och en djupgående diskussion.

Om du skriver en egen kontroll läser du "Skapa en anpassad kontroll" i Översikt över kontrollredigering.

En ControlTemplate är avsedd att vara en fristående implementeringsenhet som är osynlig för externa användare och objekt, inklusive formatmallar. Det enda sättet att ändra innehållet i kontrollmallen är från samma kontrollmall.

Användning av XAML-egenskapselement

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

XAML-värden

ControlTemplate Objektelement för ControlTemplate eller en härledd klass.

VisualTreeRootNode Ett enda XAML-element som omedelbart underordnat ControlTemplate (eller en härledd klass). Mallar måste ha en enda rotnod. För att generera en användbar mall förväntas elementet som väljs som VisualTreeRootNode ha stöd för en egen innehållsmodell, ofta en modell som stöder flera underordnade element.

VisualTreeNodeContents Ett eller flera element som slutför den avsedda mallen. Om elementet som valts som VisualTreeRootNode endast stöder ett enda underordnat element kan det bara finnas ett element som deklareras som VisualTreeNodeContents. Det är också möjligt (även om det är ovanligt) att tillhandahålla textinnehåll om den valda VisualTreeRootNode stöder en textinnehållsegenskap.

Konstruktorer

Name Description
ControlTemplate()

Initierar en ny instans av ControlTemplate klassen.

ControlTemplate(Type)

Initierar en ny instans av ControlTemplate klassen med den angivna måltypen.

Egenskaper

Name Description
Dispatcher

Hämtar det Dispatcher som DispatcherObject är associerat med.

(Ärvd från DispatcherObject)
HasContent

Hämtar ett värde som anger om den här mallen har optimerat innehåll.

(Ärvd från FrameworkTemplate)
IsSealed

Hämtar ett värde som anger om det här objektet är i ett oföränderligt tillstånd så att det inte kan ändras.

(Ärvd från FrameworkTemplate)
Resources

Hämtar eller anger den samling resurser som kan användas inom ramen för den här mallen.

(Ärvd från FrameworkTemplate)
TargetType

Hämtar eller anger den typ som detta ControlTemplate är avsett för.

Template

Hämtar eller anger en referens till objektet som registrerar eller spelar upp XAML-noderna för mallen när mallen definieras eller tillämpas av en skrivare.

(Ärvd från FrameworkTemplate)
Triggers

Hämtar en samling objekt som tillämpar egenskapsändringar TriggerBase eller utför åtgärder baserat på angivna villkor.

VisualTree

Hämtar eller anger mallens rotnod.

(Ärvd från FrameworkTemplate)

Metoder

Name Description
CheckAccess()

Avgör om den anropande tråden har åtkomst till den här DispatcherObject.

(Ärvd från DispatcherObject)
Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
FindName(String, FrameworkElement)

Söker efter elementet som är associerat med det angivna namnet som definierats i den här mallen.

(Ärvd från FrameworkTemplate)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
LoadContent()

Läser in innehållet i mallen som en instans av ett objekt och returnerar rotelementet i innehållet.

(Ärvd från FrameworkTemplate)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
RegisterName(String, Object)

Registrerar ett nytt namn/objektpar i det aktuella namnomfånget.

(Ärvd från FrameworkTemplate)
Seal()

Låser mallen så att den inte kan ändras.

(Ärvd från FrameworkTemplate)
ShouldSerializeResources(XamlDesignerSerializationManager)

Returnerar ett värde som anger om serialiseringsprocesser ska serialisera värdet Resources för egenskapen på instanser av den här klassen.

(Ärvd från FrameworkTemplate)
ShouldSerializeVisualTree()

Returnerar ett värde som anger om serialiseringsprocesser ska serialisera värdet VisualTree för egenskapen på instanser av den här klassen.

(Ärvd från FrameworkTemplate)
ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)
UnregisterName(String)

Tar bort ett namn/objektmappning från XAML-namnskopet.

(Ärvd från FrameworkTemplate)
ValidateTemplatedParent(FrameworkElement)

Kontrollerar den överordnade mallen mot en uppsättning regler.

VerifyAccess()

Framtvingar att den anropande tråden har åtkomst till den här DispatcherObject.

(Ärvd från DispatcherObject)

Explicita gränssnittsimplementeringar

Name Description
INameScope.FindName(String)

Returnerar ett objekt som har det angivna identifieringsnamnet.

(Ärvd från FrameworkTemplate)
IQueryAmbient.IsAmbientPropertyAvailable(String)

Frågar om en angiven omgivande egenskap är tillgänglig i det aktuella omfånget.

(Ärvd från FrameworkTemplate)

Gäller för

Se även