So mache ich es.
<ListView Grid.IsSharedSizeScope="True"
ItemsSource="{Binding Path=MyList,FallbackValue='12345'}" >
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*" SharedSizeGroup="col0"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="1*" SharedSizeGroup="col2"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="10,0"
Text="{Binding Path=Name, FallbackValue='Name goes here'}"/>
<Border Grid.Column="1" Margin="0,-2"
BorderBrush="DarkGray"
BorderThickness="0,0,1,0" />
<TextBlock Grid.Column="2" Margin="10,0"
Text="{Binding Path=DateModified, FallbackValue='Date goes here'}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Die SharedSizeGroup
und Grid.IsSharedSizeScope
Eigenschaften sind der Schlüssel zu dieser Art und Weise tun. Die Margin="0,-2"
Eigenschaft auf der Border
stellt sicher, dass die Trennlinie wie eine durchgehende vertikale Linie aussieht. Wenn Sie den beiden Textblöcken einen vertikalen Rand hinzufügen, müssen Sie den negativen vertikalen Rand des Rands erhöhen.
Dies wird dafür sorgen, dass die Dinge in zwei gleich große Spalten mit einer vertikalen Linie zwischen ihnen angeordnet werden, aber es wird sich nicht in Bereiche erstrecken, in denen keine Daten vorhanden sind. Ein ListView ist möglicherweise nicht die beste Option, wenn Sie diese Funktionalität möchten.
einige Daten auf die MyList
Eigenschaft im Ansichtsmodell Hinzufügen gibt dies als Ergebnis:
Natürlich ist die MyList
Eigenschaft muss eine Liste oder Sammlung einer Klasse sein, die Name
und DateModified
als Eigenschaften aufweist.
hast du diese Frage geprüft http://stackoverflow.com/questions/5645078/how-to-put-vertical-lines-for-listviewitem-in-wpf – Habib
es ist ein Anfang, aber nicht das, was ich suche . Die Gitternetzlinien sind nicht unter der Kopfzeile angeordnet, und es sieht auch nicht so aus, als ob sie alle bis zum Ende der Listenansicht gezeichnet würden. –