Template
Apparence
Définition
Permet de changer la manière dont seront dessinés les objets graphiques.
ControlTemplate embarqué dans un style
<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
<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
<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>
|
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
<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}" />
|