Bonjour à tous,
J'essaye de "porter" une de mes applications Winform vers WPF (Windows presentation) et XAML.
Voilà un aperçu de la fenêtre avec Winform (il s'agit d'une ListView en mode Detail) :
Ce que j'essaye de reproduire (avec WPF) c'est le surlignage de mot (comme vu ci-dessus) de façon à ce que ça ne surligne que les mots et non pas sur toute la largeur de la colonne. Avec Winform j'avais du passer ma listview en OwnerDraw pour faire ça.
J'ai fait un petit programme de test pour voir comment ça pourrais fonctionner avec WPF mais je suis un peu dépassé... (d'autant plus que je suis débutant avec WPF)
Le XAML :
le C# :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <Window x:Class="ListView.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Loaded ="OnLoad" Title="ListView" Height="412" Width="838"> <Window.Resources> <ControlTemplate x:Key="default" TargetType="{x:Type ListViewItem}"> <ListView Background='FloralWhite'/> </ControlTemplate> <Style x:Key="ColonneHeaderStyle" TargetType="{x:Type GridViewColumnHeader}"> <Setter Property="Background" Value="BurlyWood"/> </Style> </Window.Resources> <Grid> <ListView Margin="20,20,20,20" Name="listView1" Background="FloralWhite"> <ListView.View> <GridView AllowsColumnReorder="false" ColumnHeaderContainerStyle="{StaticResource ColonneHeaderStyle}"> <GridViewColumn x:Name="Col1" Header="Marque" Width="100" /> <GridViewColumn x:Name="Col2" Header="Modèle" Width="100" /> <GridViewColumn x:Name="Col3" Header="Couleur" Width="100" /> <GridViewColumn x:Name="Col4" Header="Prix" Width="100" /> </GridView> </ListView.View> </ListView> </Grid> </Window>
la fenêtre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 public partial class Window1 : Window { public Window1() { InitializeComponent(); } void OnLoad(object sender, RoutedEventArgs e) { ICollection<Voiture> collVoiture = new List<Voiture>(); collVoiture.Add(new Voiture("Renault", "Clio", "Blanc")); collVoiture.Add(new Voiture("Peugeot", "307", "Gris métallisé")); collVoiture.Add(new Voiture("BMW", "Z4 Roadster", "Rouge métallisé")); collVoiture.Add(new Voiture("Mercedes", "Classe A", "Noire")); Col1.DisplayMemberBinding = new Binding("Marque"); Col2.DisplayMemberBinding = new Binding("Modèle"); Col3.DisplayMemberBinding = new Binding("Couleur"); Col4.DisplayMemberBinding = new Binding("Prix"); listView1.ItemsSource = collVoiture; } } public class Voiture { private string _marque; private string _modèle; private string _couleur; private int _prix; public Voiture(string marque, string modèle, string couleur) { this._marque = marque; this._modèle = modèle; this._couleur = couleur; this._prix = 15000; } public string Marque { get { return _marque; } } public string Modèle { get { return _modèle; } } public string Couleur { get { return _couleur; } } public int Prix { get { return _prix; } set { _prix = value; } } } }
Comment faire par exemple pour ne surligner (par exemple en Jaune) que les mots "Gris métallisé" (donc pas surligner sur toute la largeur de la colonne).
Est-ce qu'on peut faire ce type de chose juste avec du XAML ou vais-je être condamner à faire de l'Ownerdraw encore une fois ?
D'ailleurs y'a-t-il encore de l'ownerdraw avec WPF ?
Merci à vous
Partager