Nyelv

ControlTemplate Osztály

Definíció

Meghatározza a vezérlő több példánya között megosztható vizualizációs struktúrát és viselkedési szempontokat 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
Öröklődés
Attribútumok

Példák

Az alábbiakban egy olyan érték ButtonStyle látható, amely beállítja a ControlTemplate következőt 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>

Ha ezt alkalmazza, a Button következőként Ellipsejelenik meg:

Button ControlTemplate sample

Ha egy Template tulajdonságot újra Control állítjaControlTemplate, mint a fenti példában, a teljes sablont lecseréli. Button A fókuszban vagy a lenyomáskor megjelenő kép mind része a lecserélni kívánt gomb alapértelmezett megjelenésének. Ezért az igényeitől függően érdemes lehet meghatároznia, hogy milyen legyen a gomb a lenyomáskor, és így tovább, mint az alábbi példában:

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

Vegye figyelembe, hogy ez a példa az itt nem látható erőforrásokra hivatkozik. A teljes minta: Styling with ControlTemplates Sample. Ez a minta számos vezérlőhöz kínál példákat a vezérlősablonokra, és ez a legjobb módszer a vezérlősablonok létrehozásának megkezdéséhez.

Megjegyzések

Ez ControlTemplate lehetővé teszi egy vezérlő vizuális szerkezetének megadását. A vezérlő szerzője meghatározhatja az alapértelmezett értéket ControlTemplate , és az alkalmazás szerzője felülbírálhatja a ControlTemplate vezérlő vizuális szerkezetének rekonstruálásához.

A vezérlési templating az WPF stílus- és templatálási modell által kínált számos funkció egyike. A stílus- és csábító modell olyan nagy rugalmasságot biztosít, hogy sok esetben nem kell saját vezérlőket írnia. Ha Ön olyan alkalmazáskészítő, aki módosítani szeretné a vezérlő vizualizációját, vagy egy meglévő vezérlőt szeretne lecserélni ControlTemplate , tekintse meg a Stílus és a Templating témakört példákkal és részletes vitafórumokkal.

Ha saját vezérlőt ír, tekintse meg az "Egyéni vezérlő létrehozása" című témakört a Vezérlőelem-létrehozási áttekintésben.

Az A ControlTemplate a megvalósítás részleteinek önálló egysége, amely nem látható a külső felhasználók és objektumok számára, beleértve a stílusokat is. A vezérlősablon tartalmának módosításának egyetlen módja ugyanaz a vezérlősablon.

XAML tulajdonságelem-használat

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

XAML-értékek

ControlTemplate Objektumelem vagy ControlTemplate származtatott osztály.

VisualTreeRootNode Egyetlen XAML-elem a (vagy származtatott osztály) közvetlen gyermekeként ControlTemplate . A sablonoknak egyetlen gyökércsomópontot kell tartalmazniuk. Egy hasznos sablon létrehozásához a VisualTreeRootNode-ként kiválasztott elem várhatóan támogatja a saját tartalommodelljét, gyakran egy több gyermekelemet támogató modellt.

VisualTreeNodeContents Egy vagy több elem, amely befejezi a kívánt sablont. Ha a VisualTreeRootNode elemként kiválasztott elem csak egyetlen gyermeket támogat, akkor csak egy elem deklarálható VisualTreeNodeContentsként. Ha a kiválasztott VisualTreeRootNode támogatja a szöveges tartalom tulajdonságot, (bár nem gyakori) szöveges tartalmat is megadhat.

Konstruktorok

Name Description
ControlTemplate()

Inicializálja a ControlTemplate osztály új példányát.

ControlTemplate(Type)

Inicializálja az osztály új példányát ControlTemplate a megadott céltípussal.

Tulajdonságok

Name Description
Dispatcher

Lekérdezi, Dispatcher hogy ez a társítva van-e DispatcherObject .

(Öröklődés forrása DispatcherObject)
HasContent

Olyan értéket kap, amely jelzi, hogy a sablon rendelkezik-e optimalizált tartalommal.

(Öröklődés forrása FrameworkTemplate)
IsSealed

Olyan értéket kap, amely jelzi, hogy az objektum nem módosítható állapotban van-e, ezért nem módosítható.

(Öröklődés forrása FrameworkTemplate)
Resources

Lekéri vagy beállítja a sablon hatókörén belül használható erőforrások gyűjteményét.

(Öröklődés forrása FrameworkTemplate)
TargetType

Lekéri vagy beállítja azt a típust, amelyhez ez ControlTemplate a cél.

Template

Lekéri vagy beállít egy hivatkozást arra az objektumra, amely rögzíti vagy lejátssza a sablon XAML-csomópontjait, amikor a sablont egy író definiálja vagy alkalmazza.

(Öröklődés forrása FrameworkTemplate)
Triggers

Olyan objektumgyűjteményt TriggerBase kér le, amely tulajdonságmódosításokat alkalmaz, vagy meghatározott feltételek alapján hajt végre műveleteket.

VisualTree

Lekéri vagy beállítja a sablon gyökércsomópontját.

(Öröklődés forrása FrameworkTemplate)

Metódusok

Name Description
CheckAccess()

Meghatározza, hogy a hívó szál hozzáfér-e ehhez DispatcherObject.

(Öröklődés forrása DispatcherObject)
Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
FindName(String, FrameworkElement)

Megkeresi a sablonban definiált megadott névhez társított elemet.

(Öröklődés forrása FrameworkTemplate)
GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
LoadContent()

Betölti a sablon tartalmát egy objektum példányaként, és visszaadja a tartalom gyökérelemét.

(Öröklődés forrása FrameworkTemplate)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
RegisterName(String, Object)

Új név/objektumpárt regisztrál az aktuális névtartományba.

(Öröklődés forrása FrameworkTemplate)
Seal()

Zárolja a sablont, hogy ne lehessen módosítani.

(Öröklődés forrása FrameworkTemplate)
ShouldSerializeResources(XamlDesignerSerializationManager)

Olyan értéket ad vissza, amely jelzi, hogy a szerializálási folyamatok szerializálják-e a tulajdonság értékét az Resources osztály példányaiban.

(Öröklődés forrása FrameworkTemplate)
ShouldSerializeVisualTree()

Olyan értéket ad vissza, amely jelzi, hogy a szerializálási folyamatok szerializálják-e a tulajdonság értékét az VisualTree osztály példányaiban.

(Öröklődés forrása FrameworkTemplate)
ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)
UnregisterName(String)

Eltávolít egy név-/objektumleképezést az XAML névtávcsőből.

(Öröklődés forrása FrameworkTemplate)
ValidateTemplatedParent(FrameworkElement)

Ellenőrzi a sablonos szülőt egy szabálykészleten.

VerifyAccess()

Kényszeríti, hogy a hívószál hozzáférhessen ehhez.DispatcherObject

(Öröklődés forrása DispatcherObject)

Explicit interfész-implementációk

Name Description
INameScope.FindName(String)

A megadott azonosító névvel rendelkező objektumot ad vissza.

(Öröklődés forrása FrameworkTemplate)
IQueryAmbient.IsAmbientPropertyAvailable(String)

Lekérdezi, hogy egy adott környezeti tulajdonság elérhető-e az aktuális hatókörben.

(Öröklődés forrása FrameworkTemplate)

A következőre érvényes:

Lásd még