我想创建一个自定义 DataTemplate
对于我的 ListView
.
我有一个简单的 class Person
:
public class Person
{
public string Name{get;set;}
public SolidColorBrush SomeColor{get;set;}
public Person(string name){ Name = name; }
}
我设置了 ItemsSource
我的属性(property)ListView
到 List<Person> persons
.
如果我只使用 DisplayMemberPath=Name
一切正常,但我想要一个自定义模板来显示 Name
和 SomeColor
.
我创建了一个示例 Grid
展示我希望它的样子(没有任何绑定(bind),仅作为示例):
<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-30 像素。
在谷歌搜索后我添加了 ListView.ItemContainerStyle
但这没有帮助。
关于如何解决这个问题有什么建议吗?
最佳答案
尝试在 ItemContainerStyle/Style/Setter
中将 HorizontalContentAlignment
设置为 Stretch
。
关于c# - ListView : Stretch grid in custom datatemplate to max width?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16014644/