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 :

ComboBox et SelectionBoxItemTemplate


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Gulix
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Par défaut ComboBox et SelectionBoxItemTemplate
    Dans une combobox, j'ai défini un ItemTemplate, qui est constitué de 2 TextBlock dans un StackPanel. Quand je déroule la ComboBox, les deux TextBlock s'affichent très bien.

    Je souhaite, quand la ComboBox est "au repos", afficher dans le cadre uniquement un des deux TextBlock. J'ai pensé au SelectionBoxItemTemplate, mais il est malheureusement en Get uniquement (et en Set private).

    Comment puis-je outrepasser ça ? J'ai pensé faire un trigger pour modifier la Visibility d'un des TextBlock quand l'élément est l'élément sélectionné, sans succès.

    Si quelqu'un est parvenu à ce que je recherche, la réponse m'intéresse beaucoup.

    Le code d'exemple de ce que je recherche

    Code xml : 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
     
    <Window x:Class="TestComboBox.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
        <Window.Resources>
            <DataTemplate x:Key="mySelectionBoxItemTemplate">
                <TextBlock Text="{Binding Path=Nom}" />
            </DataTemplate>
     
            <DataTemplate x:Key="myComboTemplate">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Path=Nom}" />
                    <TextBlock Text=" - " />
                    <TextBlock Text="{Binding Path=Prenom}" />
                </StackPanel>
            </DataTemplate>
        </Window.Resources>
     
     
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
     
            <ComboBox ItemsSource="{StaticResource People}" ItemTemplate="{StaticResource myComboTemplate}" 
                      SelectionBoxItemTemplate="{StaticResource mySelectionBoxItemTemplate}"> <!-- Ca ne fonctionne pas à cause du Set private -->
     
            </ComboBox>
        </Grid>
    </Window>

    Code c# : 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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
     
    namespace TestComboBox
    {
        /// <summary>
        /// Interaction logic for Window1.xaml
        /// </summary>
        public partial class Window1 : Window
        {
            public Window1()
            {
                List<Personne> people = new List<Personne>();
                people.Add(new Personne("Moulin", "Jean"));
                people.Add(new Personne("Bartowksi", "Chuck"));
                people.Add(new Personne("Mulder", "Fox"));
                people.Add(new Personne("Hughes", "Howard"));
                people.Add(new Personne("Alesi", "Jean"));
                this.Resources["People"] = people;
     
                InitializeComponent();
            }
        }
     
        public class Personne : INotifyPropertyChanged
        {
            string sNom;
            string sPrenom;
     
            public Personne(string nom, string prenom)
            {
                sNom = nom;
                sPrenom = prenom;
            }
     
            public string Nom
            {
                get { return sNom; }
                set { sNom = value; OnPropertyChanged("Nom"); }
            }
     
            public string Prenom
            {
                get { return sPrenom; }
                set { sPrenom = value; OnPropertyChanged("Prenom"); }
            }
     
            #region INotifyPropertyChanged
            public event PropertyChangedEventHandler PropertyChanged;
            private void OnPropertyChanged(string propertyName)
            {   
                if (PropertyChanged == null) return;
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
            #endregion
     
        }
    }
    "L'univers... on croit qu'il est infini mais quand on arrive au bout un gorille géant vous balance des tonneaux."
    Phillip J. Fry

    http://www.gulix.fr/

    BlindShark, Logiciel de Blind Test - Pull N' Bounce - Jeu XNA

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Peut-être avec un Trigger sur la propriété IsMouseOver ?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Peut-être avec un Trigger sur la propriété IsMouseOver ?
    J'aurais plutôt dit sur IsDropDownOpen... enfin, faut voir selon l'effet souhaité

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Un de mes collègues a eu le même problème aujourd'hui. Je viens de trouver 2 pages sur le sujet, mais pas encore eu le temps de tester ce que ça donne :
    http://social.msdn.microsoft.com/for...d-8224cd3ff768
    http://blogs.windowsclient.net/airbo...omization.aspx
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre expérimenté Avatar de Gulix
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Par défaut
    La première solution n'a pas l'air de fonctionner (en tout cas, le code ne compile pas). J'ai réussi à m'en sortir en utilisant les événements DropDownOpened et DropDownClosed.

    Au DropDownOpened, j'affecte à l'ItemTemplate de ma combobox le DataTemplate à utiliser dans la liste déroulante.

    Au DropDownClosed, pareil mais avec le DataTemplate à utiliser dans l'affichage "au repos". Par contre, comme l'affichage n'est pas rafraîchi automatiquement à cette étape-là, je réaffecte mon objet sélectionné après avoir changé l'ItemTemplate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void maCombo_DropDownClosed(object sender, EventArgs e)
    {
        // Affecte le template à plat pour l'affichage dans le cadre du combobox, quand le DropDown du combobox est masqué
        maCombo.ItemTemplate = Resources["affichagePlatTemplate"] as DataTemplate;
         // Changement de sélection pour forcer le rafraîchissement
        object saveItem = maCombo.SelectedItem;
        maCombo.SelectedItem = null;
        maCombo.SelectedItem = saveItem;
    }
    Tout ça fonctionne parfaitement.
    "L'univers... on croit qu'il est infini mais quand on arrive au bout un gorille géant vous balance des tonneaux."
    Phillip J. Fry

    http://www.gulix.fr/

    BlindShark, Logiciel de Blind Test - Pull N' Bounce - Jeu XNA

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. ComboBox ne met pas à jour SelectionBoxItemTemplate dans un UserControl
    Par Deesmon dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 27/05/2013, 10h48
  3. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35
  4. combobox et readonly
    Par Mac leod dans le forum C++Builder
    Réponses: 6
    Dernier message: 28/11/2002, 10h27
  5. combobox->text
    Par clovis dans le forum C++Builder
    Réponses: 18
    Dernier message: 21/06/2002, 15h43

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