Wie kann ich:
- Richten Sie den Text in der ID-Spalte nach rechts aus
- jede der Spalten automatisch entsprechend der Textlänge der Zelle mit den längsten sichtbaren Daten verkleinern?
Hier ist der Code:
<ListView Name="lstCustomers" ItemsSource="{Binding Path=Collection}">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Id}" Width="40"/>
<GridViewColumn Header="First Name" DisplayMemberBinding="{Binding FirstName}" Width="100" />
<GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding LastName}"/>
</GridView>
</ListView.View>
</ListView>
Teilantwort:
Dank Kjetil funktioniert die GridViewColumn.CellTemplate gut und die automatische Breite funktioniert natürlich. Wenn jedoch die ObservativeCollection "Collection" mit Daten aktualisiert wird, die länger als die Spaltenbreite sind, werden die Spaltengrößen nicht selbst aktualisiert, sodass dies nur eine Lösung für die ist Erstanzeige der Daten:
<ListView Name="lstCustomers" ItemsSource="{Binding Path=Collection}">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Id}" TextAlignment="Right" Width="40"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="First Name" DisplayMemberBinding="{Binding FirstName}" Width="Auto" />
<GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding LastName}" Width="Auto"/>
</GridView>
</ListView.View>
</ListView>
Antworten:
Um die automatische Größe jeder Spalte zu ändern, können Sie in der GridViewColumn Width = "Auto" festlegen.
Um den Text in der ID-Spalte nach rechts auszurichten, können Sie mit einem TextBlock eine Zellenvorlage erstellen und die TextAlignment festlegen. Legen Sie dann das ListViewItem.HorizontalContentAlignment fest (unter Verwendung eines Stils mit einem Setter im ListViewItem), damit die Zellenvorlage die gesamte GridViewCell ausfüllt.
Vielleicht gibt es eine einfachere Lösung, aber das sollte funktionieren.
Hinweis: Die Lösung erfordert sowohl HorizontalContentAlignment = Stretch in Window.Resources als auch TextAlignment = Right in der CellTemplate.
quelle
Wenn sich die Breite des Inhalts ändert, müssen Sie dieses Codebit verwenden, um jede Spalte zu aktualisieren:
Sie müssten es jedes Mal auslösen, wenn die Daten für diese Spalte aktualisiert werden.
quelle
Wenn die Größe Ihrer Listenansicht ebenfalls geändert wird, können Sie die Spalten mithilfe eines Verhaltensmusters an die volle Breite der ListView anpassen. Fast das gleiche wie bei der Verwendung von grid.column-Definitionen
Unter dem folgenden Link finden Sie einige Beispiele und einen Link zum Quellcode http://lazycowprojects.tumblr.com/post/7063214400/wpf-c-listview-column-width-auto
quelle
Ich habe die folgende Klasse erstellt und in der gesamten Anwendung verwendet, wo immer dies erforderlich ist
GridView
:quelle
Da ich einen ItemContainerStyle hatte, musste ich die HorizontalContentAlignment in den ItemContainerStyle einfügen
quelle
Ich mochte die Lösung von user1333423, außer dass sie immer jede Spalte neu dimensionierte. Ich musste zulassen, dass einige Spalten eine feste Breite hatten. In dieser Version werden Spalten mit einer Breite, die auf "Auto" eingestellt ist, automatisch angepasst, und Spalten mit einem festen Betrag werden nicht automatisch angepasst.
quelle
Ich weiß, dass dies zu spät ist, aber hier ist mein Ansatz:
Die Hauptidee besteht darin, die Breite des cellTemplete-Elements an die Breite der ViewGridColumn zu binden. Breite = 100 ist die Standardbreite, die bis zur ersten Größenänderung verwendet wird. Dahinter steckt kein Code. Alles ist in xaml.
quelle
Ich hatte Probleme mit der akzeptierten Antwort (weil ich den Abschnitt HorizontalAlignment = Stretch verpasst und die ursprüngliche Antwort angepasst habe).
Dies ist eine andere Technik. Es wird ein Raster mit einer SharedSizeGroup verwendet.
Hinweis: Das Grid.IsSharedScope = true in der ListView.
quelle
GridViewColumn
as40
und setzen die Spaltendefinitionsbreite aufAuto
? Das macht keinen Sinn.Ich habe eine Funktion zum Aktualisieren von GridView-Spaltenüberschriften für eine Liste erstellt und sie immer dann aufgerufen, wenn die Größe des Fensters geändert wird oder die Listenansicht das Layout aktualisiert.
quelle
Dies ist Ihr Code
Versuche dies
quelle