我试图让ListView水平拉伸以填充其父级(Grid)。我将ListView.ItemsPanel定义为StackPanel类型,具有水平方向。我四处搜索,发现让ListViewItems水平拉伸的技巧是在ItemContainerStyle上将"HorizontalContentAlignment"属性设置为"Stretch",我做到了。
不幸的是,我仍然不能让我的项水平拉伸。我曾考虑过根据父容器的ActualWidth手动计算每个ListViewItem的宽度,但对于本应更简单的东西来说,这似乎太费力了。
MainPage.xaml:
<Grid Grid.Row="1" Height="40">
<ListView ItemsSource="{x:Bind ViewModel.Numbers}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate x:DataType="models:MyClass">
<Border BorderBrush="red" BorderThickness="1">
<TextBlock Text="{x:Bind Number }" HorizontalAlignment="Center" />
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
MainViewModel.cs:
public class MainViewModel : ObservableRecipient
{
public List<MyClass> Numbers
{
get; set;
}
public MainViewModel()
{
Numbers = new List<MyClass>()
{
new MyClass { Number = 1 },
new MyClass { Number = 2 },
new MyClass { Number = 3 },
new MyClass { Number = 4 },
new MyClass { Number = 5 },
new MyClass { Number = 6 },
new MyClass { Number = 7 },
new MyClass { Number = 8 }
};
}
}
MyClass.cs
public class MyClass
{
public int Number
{
get; set;
}
}
输出为:
我需要数字来占据水平方向的可用空间
我正在使用Windows应用程序SDK 1.2的Win UI。
你能帮忙吗?
(我已将代码更改为最小可重复性用例)
2条答案
按热度按时间lndjwyie1#
这是可行的:
如果您需要更小的文本块之间的空间,您也可以在ListViewItem样式中设置边距/填充。
brgchamk2#
这段简单的代码应该水平拉伸每一项。
还要注意,我使用的是
x:Bind
而不是Binding
。