Template

De Banane Atomic
Aller à la navigationAller à la recherche
La version imprimable n’est plus prise en charge et peut comporter des erreurs de génération. Veuillez mettre à jour les signets de votre navigateur et utiliser à la place la fonction d’impression par défaut de celui-ci.

Définition

Permet de changer la manière dont seront dessinés les objets graphiques.

ControlTemplate embarqué dans un style

Xaml.svg
<Window.Resources>
    <Style TargetType="{x:Type TextBox}">
        <Setter Property="Background" Value="Blue" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TextBox}">
                    <Button Content="{TemplateBinding Text}"
                            Background="{TemplateBinding Background}" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

ControlTemplate sans style

Xaml.svg
<Window.Resources>
    <!-- Définit un Template en dehors d'un style : une clé doit être définie -->
    <ControlTemplate x:Key="templateToButton" TargetType="{x:Type TextBox}">
        <!-- Lie la propriété Content du Button avec la propriété Text du TextBox -->
        <Button Content="{TemplateBinding Text}" />
    </ControlTemplate>
</Window.Resources>

<!-- Applique le template via la clé -->
<TextBox Template="{StaticResource templateToButton}" />

DataTemplate

Allow to define the presentation of the data.

DataTemplate implicite

Xaml.svg
<Window.Resources>
    <!-- Ce DataTemplate s'applique à tous les MonItem -->
    <DataTemplate DataType="{x:Type local:MonItem}">
        <Button Content="{Binding Text}"></Button>
    </DataTemplate>
</Window.Resources>

<ItemsControl ItemsSource="{Binding Items}"></ItemsControl>
Csharp.svg
public class MonViewModel
{
    public MonViewModel()
    {
        Items = new List<MonItem>();
        Items.Add(new MonItem() { Text = "AAA" });
        Items.Add(new MonItem() { Text = "BBB" });
        Items.Add(new MonItem() { Text = "CCC" });
    }

    public List<MonItem> Items { get; set; }
}

public class MonItem
{
    public string Text { get; set; }
}

DataTemplate with resource key

Xaml.svg
<Window xmlns:local="clr-namespace:MyNamespace">
    <Window.Resources>
        <DataTemplate x:Key="myDataTemplate"
                      DataType="{x:Type local:Item}">
            <TextBlock Text="{Binding Name}"></TextBlock>
        </DataTemplate>
    </Window.Resources>

    <ItemsControl ItemsSource="{Binding myItems}"
                  ItemTemplate="{StaticResource myDataTemplate}" />