【发布时间】:2018-05-06 18:48:05
【问题描述】:
我想在 ListView 中排列我的项目,其中包含一个文本和一个图像,如下例所示:
- 第一列是自动的,因此它会扩展到最宽的元素。
- 第二列应展开以填充剩余空间。
那么,我怎样才能制作一个 Auto 列...或模拟它?
显然,这种布局的难点在于不同元素的宽度取决于其他元素的宽度。
编辑:使用@WPInfo 的答案,我已经尝试过:
XAML
<Page.DataContext>
<local:MainViewModel></local:MainViewModel>
</Page.DataContext>
<ListView ItemsSource="{Binding Items}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding}" />
<Border Background="CornflowerBlue" Grid.Column="1" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
代码:
public class MainViewModel
{
public IList<string> Items { get; }
public MainViewModel()
{
Items = new List<string>()
{
"ABC",
"ABCDEF",
"ABCDEFGHI",
};
}
}
预期结果是:
但是,实际结果是:
目标是第一列与其中最宽的元素一样宽。
在 WPF 中,使用 Grid.SharedSizeGroup 可以轻松解决此问题。在 UWP 中没有这样的东西。
【问题讨论】:
-
你考虑过使用RelativePanel吗?
-
你会如何使用它?请在 OP 中获取代码 :) 谢谢!