Ich verstehe, dass Sie das gesamte DataGrid oder eine ganze Spalte bereit machen können (IsReadOnly = true). Auf Zellenebene ist diese Eigenschaft jedoch nur bereit. Aber ich brauche diese Granularität. Es gibt einen Blog zum Hinzufügen von IsReadOnly zu einer Zeile, indem der Quellcode in früheren Tagen geändert wurde, als DataGrid eine öffentliche Domäne war, aber jetzt habe ich keinen Quellcode für DataGrid. Was ist eine Problemumgehung?Wie mache ich WPF DataGridCell ReadOnly?
Die Deaktivierung der Zelle (IsEnabled = false) entspricht fast meinem Bedarf. Das Problem ist jedoch, dass Sie nicht einmal auf die deaktivierte Zelle klicken können, um die Zeile auszuwählen (ich habe den vollständigen Zeilenauswahlmodus).
EDIT: Da niemand auf diese Frage geantwortet hat, denke ich, es ist keine einfache Lösung. Hier ist ein möglicher Workaround: Machen Sie die Zelle nicht editierbar. Das einzige Problem ist, dass beim Klicken auf die Zelle die Zeile nicht ausgewählt wird. Mir ist gerade aufgefallen, dass das MouseDown- oder MouseUp-Ereignis des DataGrid weiterhin ausgelöst wird, wenn auf die deaktivierte Zelle geklickt wird. Wenn ich in diesem Ereignishandler die angeklickte Zeile herausfinden könnte, könnte ich die Zeile programmgesteuert auswählen. Ich konnte jedoch nicht herausfinden, wie die zugrunde liegende Zeile von DataGrid.InputHitTest
zu finden ist. Kann mir bitte jemand ein Trinkgeld geben?
Recle, das war tatsächlich was ich auch gekommen bin. Das einzige, was ich vermisse, ist, dass ich im Allgemeinen schreibgeschützte Zellen in einer anderen Farbe zeigen möchte. Also, ich akzeptiere deins. Ich hoffe, dass Microsoft diese Eigenschaft auf Zellenebene in der nächsten Version einführen könnte. – newman
@Recre Was ist der Quelldatentyp für die Gitterbindung?Falls Sie Datentabelle verwenden, um den DataView-Typ als DataGrid-ItemSource zu füllen, und dann in DataTable auf Value-Ebene zugreifen möchten, die über die Eigenschaften IsEditable und MyCellValue verfügt, wie wird Ihre Lösung aussehen? Danke – stenly
@Recle In meinem Fall habe ich die Sammlung von Grid-Quellen und Grids dynamisch auf der Quelle (in ScrollViewer - innerhalb der DataTemplate-Eigenschaft) gefüllt. Danke für den Rat – stenly