Wie schließe ich eine benutzerdefinierte Zeile am Ende eines DataGrid in Silverlight ein?

8

Ich habe ein DataGrid in meiner Silverlight-Anwendung und es funktioniert gut, indem ich eine Zeile hinzufüge oder eine Zeile lösche, während ich die ItemsSource -Auflistung manipuliere. Ich möchte jedoch, dass es eine zusätzliche Zeile oder ein Steuerelement gibt, das immer nach der letzten Datenzeile erscheint.

Ich kann das zusätzliche Steuerelement nach der letzten Zeile mit einem ControlTemplate aufrufen und die Zeile RowsPresenter auf Auto height setzen, aber das bedeutet, dass die Zeilen nie scrollen, wenn der Renderbereich zu klein wird. Wenn ich jedoch die Zeilenhöhe von RowsPresenter auf "Star" ändere, werden die Zeilen zwar geblättert, aber das zusätzliche Steuerelement wird am unteren Rand des Datenrasters und nicht am Ende der letzten Zeile angeheftet.

Gibt es eine Möglichkeit, wie ich das Sternhöhenverhalten auf dem RowsPresenter haben kann, während meine Kontrolle immer noch so erscheint, wie ich es möchte?

Ich denke derzeit, dass ich irgendwie das LoadingRow-Ereignis verwenden muss, um die Position der letzten Zeile zu finden und ein Canvas oder ähnliches zu verwenden, um mein Steuerelement an der entsprechenden Stelle zu platzieren.

Gedanken?

Vielen Dank im Voraus für die Hilfe.

Aktualisieren

Ich habe auch eine Frage gestellt (und letztendlich geantwortet), dass ein Steuerelement unter einem anderen angeheftet wird, was zur Behebung dieses Problems verwendet werden könnte, wenn die benutzerdefinierte Zeile nicht mit den restlichen Zeilen (wie in meinem Fall, wo ich wollte, dass eine andere Datagrid-Kopfzeile Summen zeigt und über die anderen Zeilen schwebt).

Wie stecke ich ein Steuerelement unter ein anderes in Silverlight?

    
Jeff Yates 04.02.2009, 18:25
quelle

3 Antworten

5

Ich habe mein Problem letzte Nacht in einem Wirbel der Inspiration gelöst. Ich bemerke, dass niemand anderes für diese Frage gestimmt hat, daher ist diese Antwort für niemanden hilfreich, nur für den Fall.

Als Erstes habe ich meine benutzerdefinierte Zeilensteuerung und RowsPresenter in einem Raster aus zwei Zeilen kombiniert, wobei jede Zeile an Auto angepasst wurde. Dann legte ich das Raster in einen ScrollViewer und bemaß die Scroll-Viewer-Zeile auf Sterngröße. Ich habe den VerticalScrollbar-Schablonenteil nicht in meine Vorlage eingefügt, da dieser nur den RowsPresenter scrollt.

Dies gab mir genau das Verhalten, nach dem ich gesucht habe, wenn eine Zeile hinzugefügt wurde und die benutzerdefinierte Zeile am Ende der letzten Datenzeile angeheftet bleibt. Wenn die Zeilen und die benutzerdefinierte Zeile über das Ende des sichtbaren Bereichs hinauslaufen, wird die Bildlaufleiste angezeigt, um das Scrollen zu ermöglichen, während die Header an der richtigen Stelle bleiben.

Arbeit erledigt. Ich hoffe, dass jemand das hilfreich findet. Unten ist mein ControlTemplate XAML.

%Vor%     
Jeff Yates 05.02.2009, 15:11
quelle
2

Ich bin mir nicht sicher, ob dies für Silverlight hilft, aber ich habe eine Totalszeile zu einem WPF DataGrid hinzugefügt, indem ich eine unsichtbare Spalte namens IsTotal hinzugefügt habe. Ich war in der Lage, diese Zeile mit benutzerdefinierten Gruppierung / Sortierung immer am unteren Rand des Rasters erscheinen zu lassen. Die Gruppierungs- / Sortierreihenfolge wurde so konfiguriert, dass diese Spalte als primäre Sortierung mit einer Fixierungsrichtung verwendet wird. Scheint gut zu funktionieren.

    
Max Palmer 21.10.2009 08:50
quelle
1

Erstellen Sie zuerst ein Raster für das DataGrid und das fixierte Steuerelement:

%Vor%

Der Trick ist VerticalAlignment="Top" - Wenn das DataGrid kleiner als die verfügbare Höhe ist, wird es an den Anfang des verfügbaren Speicherplatzes verschoben und das gepinnte Steuerelement wird darunter angezeigt.

Platzieren Sie dieses Raster dann in einen Container, der sich vertikal erstreckt, z. B. in einer Reihe eines anderen Gitters mit Sternhöhe:

%Vor%

Anstelle des root-Grids können Sie einen anderen Container haben, der sich vertikal erstreckt. Wichtig ist, dass er versucht, den gesamten verfügbaren Platz dafür zu füllen.

    
Radoslav Radev 14.12.2013 08:48
quelle