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 :
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 ?
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"); } } } }
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 :
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 !
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>
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.
Partager