Capisco che è possibile rendere pronto l'intero DataGrid o un'intera colonna (IsReadOnly = true). Tuttavia, a livello di cella questa proprietà è solo pronta. Ma ho bisogno di questo livello di granularità. C'è un blog sull'aggiunta di IsReadOnly a una riga modificando il codice sorgente nei vecchi giorni in cui DataGrid era di dominio pubblico, ma ora non ho codice sorgente per DataGrid. Cos'è una soluzione alternativa?Come rendere WPF DataGridCell ReadOnly?
Rendere la cella disabilitata (IsEnabled = false) soddisfa quasi il mio bisogno. Ma il problema è che non puoi nemmeno cliccare sulla cella disabilitata per selezionare la riga (ho una modalità di selezione riga completa).
EDIT: Poiché nessuno ha risposto a questa domanda, quindi credo che non sia una soluzione facile. Ecco una possibile soluzione: rendere la cella non modificabile. L'unico problema è che facendo clic sulla cella non si seleziona la riga. Ho appena notato che l'evento MouseDown o MouseUp di DataGrid viene ancora attivato quando si fa clic sulla cella disabilitata. In questo gestore di eventi, se potessi capire la riga su cui ha fatto clic, potrei selezionare la riga a livello di codice. Tuttavia, non sono riuscito a capire come trovare la riga sottostante da DataGrid.InputHitTest
. Qualcuno può darmi qualche consiglio?
Recle, questo è stato effettivamente quello che sono venuto anche io. L'unica cosa che mi manca è che, in generale, mi piacerebbe mostrare celle di sola lettura di un colore diverso. Quindi, sto accettando il tuo. Spero che Microsoft possa introdurre questa proprietà a livello di cella nella prossima versione. – newman
@Recle qual è il tipo di dati sorgente per il collegamento a griglia?Nel caso in cui si usi datatable per riempire il tipo DataView come DataGrid ItemSource e quindi si desideri accedere all'oggetto a livello di valore in DataTable, che ha proprietà IsEditable e MyCellValue, come sarà la tua soluzione? Grazie – stenly
@Recle Nel mio caso ho la raccolta di fonti di rete e le griglie sono popolate dinamicamente in base all'origine (in ScrollViewer - all'interno della proprietà DataTemplate). Grazie per il consiglio – stenly