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 dont seul l'élément sélectionné est éditable


Sujet :

Windows Presentation Foundation

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut ComboBox dont seul l'élément sélectionné est éditable
    Bonjour,

    j'essaye d'obtenir le composant suivant :
    une présentation des items en liste comme une ComboBox, dont chaque item serait éditable seulement quand il est l'item courant.
    Au pire les items pourraient être tout le temps éditables.

    Pour l'exemple supposons que les items à afficher soient des Database définies ainsi :
    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
    using System.ComponentModel;
     
    namespace TestWpfComboBox
    {
        public class Database : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
     
            protected void NotifyPropertyChanged(string info)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(info));
                }
            }
     
            private string _Name;
            public string Name
            {
                get
                {
                    return this._Name;
                }
                set
                {
                    this._Name = value;
                    this.NotifyPropertyChanged("Name");
                }
            }
        }
    }
    J'ai donc d'abord tenté de faire une simple ComboBox éditable en mettant la propriété IsEditable à True, mais alors comment exposer la propriété Name des items afin de la modifier via la ComboBox ?

    S'il n'est pas possible de procéder aussi simplement il est toujours possible de passer par l'ItemTemplate en utilisant une TextBox.
    Mais le premier problème est de faire en sorte que la TextBox occupe tout l'espace.
    Une première tentative non satisfaisante est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ComboBox ItemsSource="{Binding ElementName=Self,Path=Databases,UpdateSourceTrigger=PropertyChanged}">
    	<ComboBox.ItemTemplate>
    		<DataTemplate>
    			<TextBox Text="{Binding Path=Name}" Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ComboBox},Path=ActualWidth}" />
    		</DataTemplate>
    	</ComboBox.ItemTemplate>
    </ComboBox>
    En effet la TextBox n'occupe pas exactement l'espace et pire quand l'item est sélectionné elle occupe toute la largeur de l'écran !
    Comment faire pour qu'elle s'adapte exactement ?

    Mais ça c'est plutôt un détail, le vrai problème est que quand un item est sélectionné il n'est plus possible d'en éditer la TextBox.
    Ce qui est une restriction du comportement "édition tout le temps" et le contraire du comportement idéal souhaité : "édition seulement quand sélectionné".


    Donc : avez vous des pistes pour obtenir le comportement idéal "édition seulement quand sélectionné", sinon pour obtenir le comportement "édition tout le temps" ?
    Malheureusement il ne semble pas exister de "SelectedItemTemplate" ou de "EditTemplate" qui auraient sans doute pu simplifier la tâche.


    Merci d'avance.

    PS : En pièce jointe se trouve un projet minimal illustrant les problèmes.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Réponses: 33
    Dernier message: 12/01/2011, 17h20
  2. Réponses: 10
    Dernier message: 17/08/2010, 21h59
  3. [AC-2003] Fermer une application dont seul une partie du titre est connu
    Par Miss Ti dans le forum VBA Access
    Réponses: 1
    Dernier message: 11/06/2009, 00h53
  4. Binder l'élément sélectionné d'un combobox
    Par jean-pierre96 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 31/03/2009, 13h34
  5. Réponses: 10
    Dernier message: 12/09/2007, 17h25

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