IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

[WPF & C#] Surligner un mot en XAML ?


Sujet :

Windows Presentation Foundation

  1. #1
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut [WPF & C#] Surligner un mot en XAML ?
    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 :

    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>
    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
    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; } }
        }
    }
    la fenêtre :



    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

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Je pense que tu dois pouvoir y arriver en créant un 2ème ControlTemplate, là où tu surligneras le contenu.

    Ensuite, dans ton code, suivant le contenu de la ligne, tu appliques le Template adéquat


    A+

  3. #3
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Merci Thomas pour ta réponse

    Je suis toujours un peu ennuyé, je n'y arrive pas du tout...

    Ayant chercher sur la MSDN, je pense au final que je dois utiliser un DataTemplate pour la propriété GridViewColumn.CellTemplate... Après c'est une autre histoire que d'y parvenir

    D'un point de vue praticité, on ne peut pas dire que WPF + XAML soit vraiment très simple quand on est un habitué des Winforms. C'est sûrement un manque d'habitude de ma part mais je trouve que la courbe d'apprentissage est vraiment difficile (ça ne reste que mon avis).

    En tout cas je te remercie d'avoir pris le temps de me répondre, je vais continuer à chercher et à "bidouiller" (ça reste du bidouillage pour l'instant ).

Discussions similaires

  1. [RegEx] Surligner des mots dans un texte
    Par tomaprice dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2009, 13h28
  2. [MySQL] Moteur de recherche : surligner les mots clés
    Par lagratteCchouette dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/01/2008, 18h15
  3. [WPF][Resources & styles] récupération d'un style xaml en C#?
    Par bakonu dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 13/11/2007, 15h30
  4. [PHP-JS] Surligné les mots demandé
    Par kevinf dans le forum Langage
    Réponses: 29
    Dernier message: 17/09/2006, 17h49
  5. [vb6] Surligner un mot dans une textbox après recherche
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/07/2006, 12h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo