Control.Template Properti

Definisi

Mendapatkan atau mengatur templat kontrol. Templat kontrol menentukan tampilan visual kontrol di UI, dan didefinisikan dalam markup XAML.

public:
 property ControlTemplate ^ Template { ControlTemplate ^ get(); void set(ControlTemplate ^ value); };
ControlTemplate Template();

void Template(ControlTemplate value);
public ControlTemplate Template { get; set; }
var controlTemplate = control.template;
control.template = controlTemplate;
Public Property Template As ControlTemplate
<control Template="{StaticResource templateResourceKey}"/>
- or -
<Style TargetType="controlTypeName">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="controlTypeName">
        templateRoot
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Nilai Properti

Templat yang menentukan tampilan Kontrol. ControlTemplate harus memiliki tepat satu elemen akar sebagai kontennya.

Contoh

Contoh ini memperlihatkan templat kontrol yang lebih lengkap yang didefinisikan sebagai Gaya dan Setter dengan nilai Setter.Property "Template". Ini adalah gaya bernama untuk kontrol RadioButton . Ini termasuk elemen templat yang biasanya merupakan bagian dari templat kontrol fungsional, seperti elemen properti terlampir VisualStateManager.VisualStateGroups yang dilampirkan ke elemen akar templat, dan nilai atribut x:Name yang ditetapkan untuk setiap bagian kontrol yang menonjol.

<Style x:Key="TextRadioButtonStyle" TargetType="RadioButton"> 
    <Setter Property="MinWidth" Value="0"/> 
    <Setter Property="MinHeight" Value="0"/> 
    <Setter Property="Template"> 
        <Setter.Value> 
            <ControlTemplate TargetType="RadioButton"> 
                <Grid Background="Transparent"> 
                    <TextBlock 
                        x:Name="Text" 
                        Text="{TemplateBinding Content}" 
                        Margin="3,-7,3,10" 
                        TextWrapping="NoWrap" 
                        Style="{StaticResource SubheaderTextStyle}"/> 
                    <Rectangle 
                        x:Name="FocusVisualWhite" 
                        IsHitTestVisible="False" 
                        Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" 
                        StrokeEndLineCap="Square" 
                        StrokeDashArray="1,1" 
                        Opacity="0" 
                        StrokeDashOffset="1.5"/> 
                    <Rectangle 
                        x:Name="FocusVisualBlack" 
                        IsHitTestVisible="False" 
                        Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" 
                        StrokeEndLineCap="Square" 
                        StrokeDashArray="1,1" 
                        Opacity="0" 
                        StrokeDashOffset="0.5"/> 

                    <VisualStateManager.VisualStateGroups> 
                        <VisualStateGroup x:Name="CommonStates"> 
                            <VisualState x:Name="Normal"/> 
                            <VisualState x:Name="PointerOver"> 
                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPointerOverForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Pressed"> 

                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPressedForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Disabled"> 
                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ButtonDisabledForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                        </VisualStateGroup> 
                        <VisualStateGroup x:Name="FocusStates"> 
                            <VisualState x:Name="Focused"> 
                                <Storyboard> 
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualWhite" Storyboard.TargetProperty="Opacity"/> 
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualBlack" Storyboard.TargetProperty="Opacity"/> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Unfocused"/> 
                        </VisualStateGroup> 
                        <VisualStateGroup x:Name="CheckStates"> 
                            <VisualState x:Name="Checked"/> 
                            <VisualState x:Name="Unchecked"> 
                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationSecondaryForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Indeterminate"/> 
                        </VisualStateGroup> 
                    </VisualStateManager.VisualStateGroups> 
                </Grid> 
            </ControlTemplate> 
        </Setter.Value> 
    </Setter> 
</Style> 

Keterangan

Sintaks XAML kedua yang ditunjukkan di atas adalah sintaks Setter sebagai bagian dari Gaya. Ini adalah bagaimana nilai Templat untuk Kontrol didefinisikan dalam hampir semua kasus.

TargetType adalah atribut yang diperlukan pada semua elemen ControlTemplate yang digunakan sebagai nilai Templat. Nilai harus cocok dengan properti TargetType untuk Gaya yang berisi Setter untuk Templat, jika Anda menggunakan sintaks setter gaya.

ControlTemplate menentukan tampilan Kontrol; jika Kontrol tidak memiliki ControlTemplate, Kontrol tidak akan memiliki kehadiran yang terlihat di aplikasi Anda. Penulis kontrol menentukan templat kontrol default, dan penulis aplikasi dapat membuat templat ulang ControlTemplate XAML untuk menentukan ulang pohon visual kontrol.

Templat kontrol biasanya diatur dalam Extensible Application Markup Language (XAML) sebagai bagian dari gaya implisit khusus kontrol. Dalam hal ini, nilai Properti di Setter diatur sebagai string "Template", dan nilai Setter.Value diatur sebagai elemen properti, yang berisi elemen objek ControlTemplate . Misalnya, ini adalah Gaya yang menentukan nilai Templat untuk ScrollViewer. Ini adalah contoh gaya implisit, di mana Gaya dapat berada di ResourceDictionary tetapi tidak memerlukan atribut x:Key.

<ResourceDictionary>
  <Style TargetType="ScrollViewer">
  ...
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="ScrollViewer">
          <!--visual root of template for a ScrollViewer-->
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
  ...
</ResourceDictionary>

Gaya dan template

Anda bisa menggunakan Setter dalam Gaya untuk menerapkan nilai ke properti dependensi apa pun. Tetapi ini adalah Setter untuk properti Templat dari kelas turunan Kontrol yang merupakan sebagian besar markup XAML dalam Gaya biasa. Saat Gaya digunakan untuk menentukan templat kontrol, TargetType elemen Style dan TargetType dari elemen ControlTemplate untuk setter Control.Template-nya harus selalu menggunakan nilai yang sama. Setter templat menentukan definisi antarmuka pengguna templat dasar untuk kontrol tempat templat tersebut diterapkan. Ini juga berisi status visual untuk kontrol, dan definisi UI berbasis status lainnya seperti transisi tema default. Untuk kontrol kompleks seperti ListBox, Gaya templat default dan ControlTemplate di dalamnya dapat memiliki ratusan baris XAML. Untuk informasi selengkapnya tentang peran Templat dalam skenario templat kontrol, lihat Mulai Cepat: Mengontrol templat.

Gaya implisit

Anda dapat menentukan gaya sewaktu-waktu sehingga Gaya digunakan secara implisit oleh semua objek dari TargetType yang sama, tanpa mengharuskan setiap instans objek tersebut untuk secara khusus mereferensikan Gaya sebagai nilai FrameworkElement.Style . <Style> Saat sumber daya dideklarasikan dalam ResourceDictionary tanpa atribut x:Key, nilai x:Key menggunakan nilai properti TargetType. Jika Anda mengatur gaya secara implisit, gaya hanya diterapkan ke jenis yang cocok dengan TargetType dengan tepat dan bukan ke elemen yang berasal dari nilai TargetType . Misalnya, jika Anda membuat gaya secara implisit untuk semua kontrol ToggleButton di aplikasi Anda, dan aplikasi Anda memiliki kontrol ToggleButton dan CheckBox (CheckBox berasal dari ToggleButton), gaya implisit "ToggleButton" hanya diterapkan ke kontrol ToggleButton .

Berlaku untuk

Lihat juga