ListView:在自定义数据模板中拉伸网格到最大宽度
本文关键字:网格 自定义 数据 ListView | 更新日期: 2023-09-27 18:09:18
我想为我的ListView
创建一个自定义的DataTemplate
。我有一个简单的class Person
:
public class Person
{
public string Name{get;set;}
public SolidColorBrush SomeColor{get;set;}
public Person(string name){ Name = name; }
}
我将ListView
的ItemsSource
属性设置为List<Person> persons
。如果我只是使用DisplayMemberPath=Name
一切都很好,但我想有一个自定义模板来显示Name
和SomeColor
。我创建了一个示例Grid
来展示我希望它看起来像什么(没有任何绑定,只是一个例子):
<Grid Height="50">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" MinWidth="10"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Patrick" Grid.Column="0" TextAlignment="Right" Margin="0,0,10,0" VerticalAlignment="Center"/>
<Rectangle Fill="Green" Grid.Column="1" />
</Grid>
这是我试图实现我的DataTemplate
为ListView
:
<ListView x:Name="listView" ItemsSource="{Binding ElementName=pageRoot, Path=FriendList ,Mode=OneWay}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" MinWidth="10"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" Grid.Column="0"/>
<Rectangle Fill="LimeGreen" Grid.Column="1"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
现在的问题是Grid
没有扩展到ListView的全部可用宽度。它只是一个小的Grid
,宽度可能是20-30px。在谷歌搜索后,我添加了ListView.ItemContainerStyle
,但没有帮助。
尝试在ItemContainerStyle/Style/Setter
中设置HorizontalContentAlignment
为Stretch
。