WPF DataGrid cambia il modello tra la modalità di visualizzazione e la modalità di modifica
-
09-09-2019 - |
Domanda
Se hai un WPF DataGrid
a sinistra di una Finestra con un'area a destra per la visualizzazione del record selezionato.Il record selezionato è composto da Textbox
es e ComboBox
es che sono disabilitati finché non si fa clic sul pulsante di modifica.Tutto funziona come previsto.
Tuttavia, sembra un po’ goffo popolarlo ComboBox
es quando il SelectedItem
del DataGrid
essere cambiato.Un controllo molto più leggero come a TextBlock
potrebbe essere utilizzato finché non si fa clic sul pulsante Modifica, quindi il file TextBlock
s potrebbe essere sostituito ComboBox
es.
Sono sicuro che questo possa essere fatto con una sorta di modello, ma quando ho provato a sperimentarlo, tutti gli eventi associati al ComboBox
segnalano un errore in quanto non sono più presenti in quanto sono stati sostituiti con TextBlock in "Modalità di visualizzazione".
Probabilmente sto sbagliando, quindi qualche consiglio sarebbe apprezzato.
Soluzione
qui è eccellente articolo
Per applicare la modifica con un solo clic a tutte le celle nel DataGrid
- Incolla lo stile seguente nelle Risorse del tuo DataGrid
- Incolla il metodo nel code-behind
Per applicare la modifica con un solo clic solo a determinate celle nel DataGrid
- Imposta un x:Key sullo stile (es.)
- Incolla lo stile nelle Risorse del tuo DataGrid
- Applica lo stile alla proprietà CellStyle delle colonne che desideri modificare con un solo clic (es.)
Incolla il metodo nel code-behind
// // SINGLE CLICK EDITING // private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { DataGridCell cell = sender as DataGridCell; if (cell != null && !cell.IsEditing && !cell.IsReadOnly) { if (!cell.IsFocused) { cell.Focus(); } DataGrid dataGrid = FindVisualParent<DataGrid>(cell); if (dataGrid != null) { if (dataGrid.SelectionUnit != DataGridSelectionUnit.FullRow) { if (!cell.IsSelected) cell.IsSelected = true; } else { DataGridRow row = FindVisualParent<DataGridRow>(cell); if (row != null && !row.IsSelected) { row.IsSelected = true; } } } } } static T FindVisualParent<T>(UIElement element) where T : UIElement { UIElement parent = element; while (parent != null) { T correctlyTyped = parent as T; if (correctlyTyped != null) { return correctlyTyped; } parent = VisualTreeHelper.GetParent(parent) as UIElement; } return null; }
Altri suggerimenti
La proprietà ContentTemplateSelector dovrebbe consentire di selezionare un modello o un altro a seconda della modalità corrente (visualizzazione/modifica)
Il collegamento della risposta contrassegnato è morto.
Questo può invece aiutare:http://wpf.codeplex.com/wikipage?title=Modifica con un solo clic%20