Share via


ControlTemplate Kelas

Definisi

Menentukan struktur visual dan aspek perilaku dari yang Control dapat dibagikan di beberapa instans kontrol.

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

Contoh

Berikut ini memperlihatkan ButtonStyle yang mengatur ControlTemplate dari 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>

Ketika ini diterapkan, muncul Button sebagai Ellipse:

Tombol ControlTemplate sampel

Saat Anda mengatur Template properti dari ke Control yang baru ControlTemplate seperti dalam contoh di atas, Anda mengganti seluruh templat. Button Seperti apa tampilannya saat fokus atau ditekan adalah bagian dari tampilan default tombol yang Anda ganti. Oleh karena itu, tergantung pada kebutuhan Anda, Anda mungkin ingin memasukkan definisi Anda seperti apa tombol Anda akan terlihat ketika ditekan, dan sebagainya, seperti dalam contoh berikut:

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

Perhatikan bahwa contoh ini mereferensikan sumber daya yang tidak ditampilkan di sini. Untuk sampel lengkapnya, lihat Menata dengan Sampel ControlTemplates. Sampel tersebut menyediakan contoh templat kontrol untuk banyak kontrol dan merupakan cara terbaik bagi Anda untuk mulai membuat templat kontrol.

Keterangan

ControlTemplate memungkinkan Anda menentukan struktur visual kontrol. Pembuat kontrol dapat menentukan default ControlTemplate dan penulis aplikasi dapat mengambil alih ControlTemplate untuk mengonstruksi struktur visual kontrol.

Templat kontrol adalah salah satu dari banyak fitur yang ditawarkan oleh model gaya dan templat WPF. Model gaya dan templat memberi Anda fleksibilitas yang luar biasa sehingga dalam banyak kasus Anda tidak perlu menulis kontrol Anda sendiri. Jika Anda adalah penulis aplikasi yang ingin mengubah visualisasi kontrol Anda atau untuk mengganti ControlTemplate kontrol yang ada, lihat topik Gaya dan Templating misalnya dan diskusi mendalam.

Jika Anda menulis kontrol Anda sendiri, lihat "Create Kontrol Kustom" di Gambaran Umum Penulisan Kontrol.

ControlTemplate dimaksudkan untuk menjadi unit detail implementasi mandiri yang tidak terlihat oleh pengguna dan objek luar, termasuk gaya. Satu-satunya cara untuk memanipulasi konten templat kontrol adalah dari dalam templat kontrol yang sama.

Penggunaan Elemen Properti XAML

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

Nilai XAML

ControlTemplate Elemen objek untuk ControlTemplate atau kelas turunan.

VisualTreeRootNode Elemen XAML tunggal sebagai turunan langsung dari ControlTemplate (atau kelas turunan). Templat harus memiliki satu simpul akar. Untuk menghasilkan templat yang berguna, elemen yang dipilih sebagai VisualTreeRootNode diharapkan mendukung model kontennya sendiri, seringkali model yang mendukung beberapa elemen anak.

VisualTreeNodeContents Satu atau beberapa elemen yang menyelesaikan templat yang dimaksudkan. Jika elemen yang dipilih sebagai VisualTreeRootNode hanya mendukung satu anak, maka hanya ada satu elemen yang dinyatakan sebagai VisualTreeNodeContents. Dimungkinkan juga (meskipun tidak jarang) untuk menyediakan konten teks jika VisualTreeRootNode yang dipilih mendukung properti konten teks.

Konstruktor

ControlTemplate()

Menginisialisasi instans baru kelas ControlTemplate.

ControlTemplate(Type)

Menginisialisasi instans ControlTemplate baru kelas dengan jenis target yang ditentukan.

Properti

Dispatcher

Mendapatkan ini DispatcherDispatcherObject dikaitkan dengan.

(Diperoleh dari DispatcherObject)
HasContent

Mendapatkan nilai yang menunjukkan apakah templat ini memiliki konten yang dioptimalkan.

(Diperoleh dari FrameworkTemplate)
IsSealed

Mendapatkan nilai yang menunjukkan apakah objek ini dalam status tidak dapat diubah sehingga tidak dapat diubah.

(Diperoleh dari FrameworkTemplate)
Resources

Mendapatkan atau mengatur kumpulan sumber daya yang dapat digunakan dalam lingkup templat ini.

(Diperoleh dari FrameworkTemplate)
TargetType

Mendapatkan atau mengatur jenis yang ControlTemplate dimaksudkan ini.

Template

Mendapatkan atau mengatur referensi ke objek yang merekam atau memutar simpul XAML untuk templat saat templat ditentukan atau diterapkan oleh penulis.

(Diperoleh dari FrameworkTemplate)
Triggers

Mendapatkan kumpulan TriggerBase objek yang menerapkan perubahan properti atau melakukan tindakan berdasarkan kondisi yang ditentukan.

VisualTree

Mendapatkan atau mengatur simpul akar templat.

(Diperoleh dari FrameworkTemplate)

Metode

CheckAccess()

Menentukan apakah utas panggilan memiliki akses ke ini DispatcherObject.

(Diperoleh dari DispatcherObject)
Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
FindName(String, FrameworkElement)

Menemukan elemen yang terkait dengan nama yang ditentukan dalam templat ini.

(Diperoleh dari FrameworkTemplate)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
LoadContent()

Memuat konten templat sebagai instans objek dan mengembalikan elemen akar konten.

(Diperoleh dari FrameworkTemplate)
MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
RegisterName(String, Object)

Mendaftarkan pasangan nama/objek baru ke dalam cakupan nama saat ini.

(Diperoleh dari FrameworkTemplate)
Seal()

Mengunci templat sehingga tidak dapat diubah.

(Diperoleh dari FrameworkTemplate)
ShouldSerializeResources(XamlDesignerSerializationManager)

Mengembalikan nilai yang menunjukkan apakah proses serialisasi harus membuat serialisasi nilai Resources properti pada instans kelas ini.

(Diperoleh dari FrameworkTemplate)
ShouldSerializeVisualTree()

Mengembalikan nilai yang menunjukkan apakah proses serialisasi harus membuat serialisasi nilai VisualTree properti pada instans kelas ini.

(Diperoleh dari FrameworkTemplate)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)
UnregisterName(String)

Menghapus pemetaan nama/objek dari namescope XAML.

(Diperoleh dari FrameworkTemplate)
ValidateTemplatedParent(FrameworkElement)

Memeriksa induk templat terhadap sekumpulan aturan.

VerifyAccess()

Memberlakukan bahwa utas panggilan memiliki akses ke ini DispatcherObject.

(Diperoleh dari DispatcherObject)

Implementasi Antarmuka Eksplisit

INameScope.FindName(String)

Mengembalikan objek yang memiliki nama pengidentifikasi yang disediakan.

(Diperoleh dari FrameworkTemplate)
IQueryAmbient.IsAmbientPropertyAvailable(String)

Kueri apakah properti sekitar tertentu tersedia dalam cakupan saat ini.

(Diperoleh dari FrameworkTemplate)

Berlaku untuk

Lihat juga