Ich habe ein benutzerdefiniertes Datagrid, dessen Zelle wie folgt formatiert ist:
%Vor%Das Datagrid wird wie folgt formatiert:
%Vor%Im Datagrid werden Zeilen dynamisch mit einem Hintergrundthread hinzugefügt und können Tausende von Daten enthalten. Es gibt ein Leistungsproblem mit dem Datagrid. Die CPU-Auslastung nimmt weiter zu.
Ich habe herausgefunden, dass der Grund LayoutTransform
ist. Wenn ich Height
von DataGridCell
oder Width
von Grid
, das der Inhalt der Zelle ist, einstelle, wird die CPU-Nutzung reduziert. Aber ich kann das nicht gleich codieren. Die Breite sollte basierend auf der Länge des Inhalts festgelegt werden.
Fest codierte Höhe einstellen:
%Vor%Festcodierte Breite einstellen:
%Vor% Zuerst habe ich versucht, einen Konverter zu binden, an den Inhalt übergeben und die Breite berechnet und an die Width
-Eigenschaft von Grid
zurückgegeben wird. Dies verursacht ein Flackern, während neue Daten hinzugefügt werden und die CPU-Auslastung erhöht wird.
Zweitens habe ich LayoutTransform
durch RenderTransform
ersetzt. Die Breite der Zelle wird nicht basierend auf dem Inhalt erhöht, was dazu führt, dass nur ein Teil der Daten angezeigt wird.
Drittens habe ich versucht, eine Eigenschaft an Height
von DataGridCell
zu binden, die dynamisch mit der höchsten Breite des Wertes in DataGridCell
aktualisiert wird. Dies verbraucht auch CPU-Auslastung.
Gibt es eine andere Alternative, um das Ergebnis von LayoutTransform
anders als RenderTransform
zu erreichen?
Ich freue mich auf jede Art von Eingabe / Vorschlägen. Danke.
Ich würde versuchen, die Transformation in der Rendering-Logik selbst vorzunehmen. Ich habe das selbst nicht ausprobiert, aber ich denke, es ist einen Versuch wert, um zu sehen, ob dies eine ähnliche Leistung wie die Verwendung von RenderTransform
bietet, während Sie auch das Ergebnis geben, das Sie suchen, wenn Sie RotatedText
anstelle von% verwenden. co_de% mit TextBlock
: