« Template » : différence entre les versions

De Banane Atomic
Aller à la navigationAller à la recherche
 
(Une version intermédiaire par le même utilisateur non affichée)
Ligne 7 : Ligne 7 :
<Window.Resources>
<Window.Resources>
     <Style TargetType="{x:Type TextBox}">
     <Style TargetType="{x:Type TextBox}">
        <Setter Property="Background" Value="Blue" />
         <Setter Property="Template">
         <Setter Property="Template">
             <Setter.Value>
             <Setter.Value>
                 <ControlTemplate TargetType="{x:Type TextBox}">
                 <ControlTemplate TargetType="{x:Type TextBox}">
                     <Button Content="{TemplateBinding Text}"/>
                     <Button Content="{TemplateBinding Text}"
                            Background="{TemplateBinding Background}" />
                 </ControlTemplate>
                 </ControlTemplate>
             </Setter.Value>
             </Setter.Value>
Ligne 33 : Ligne 35 :


= [https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/data-templating-overview DataTemplate] =
= [https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/data-templating-overview DataTemplate] =
Allow to define the presentation of the data.
== DataTemplate implicite ==
== DataTemplate implicite ==
<kode lang='xaml'>
<kode lang='xaml'>

Dernière version du 8 novembre 2021 à 14:46

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}" />