Template

De Banane Atomic
Aller à la navigationAller à la recherche

Définition

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

ControlTemplate embarqué dans un style

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

ControlTemplate sans style

Xaml.png
<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 implicite

Xaml.png
<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; }
}