XAML ListView:项容器忽略垂直对齐

6ojccjat  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(101)

我使用WinUI 3中的水平ListView来显示一种具有任意列高的图表:

问题是,当没有足够的空间和滚动条出现时,布局就会崩溃:

这很奇怪,因为item contaner的对齐设置为Stretch,所以我希望它们应该填充项目面板提供的所有垂直空间:

<ListView.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <VirtualizingStackPanel Orientation="Horizontal" VerticalAlignment="Stretch" />
                                </ItemsPanelTemplate>
                            </ListView.ItemsPanel>
                            <ListView.ItemContainerStyle>
                                <Style TargetType="ListViewItem">
                                    <!--<Setter Property="BorderThickness" Value="1" />
                                    <Setter Property="BorderBrush" Value="Red" />-->
                                    <Setter Property="VerticalAlignment" Value="Stretch"/>
                                    <Setter Property="VerticalContentAlignment" Value="Bottom" />
                                    <Setter Property="MinWidth" Value="0" />
                                    <Setter Property="Padding" Value="0" />
                                </Style>
                            </ListView.ItemContainerStyle>

如果我取消注解这两行以查看容器边框并向下滚动,我会看到下面的图片:

有什么想法吗?先谢谢你了。

bksxznpy

bksxznpy1#

如果您尝试通过它们的样式拉伸ListViewItem,而它们没有,则可能表明它们受到其父对象(在本例中为VirtualizingStackPanel)的约束。
您可以尝试将常规StackPanel的面板更改为Orientation="Horizontal"(不是永久性的,只是为了比较行为),看看会发生什么。可能需要在VirtualizingStackPanel上设置一些属性以实现您想要的功能。
也可能是你陷入了未定义的行为领域。当你考虑它的时候,布局是有问题的,当它超出了可用的空间。面板可能无法拉伸其项目,因为它不知道垂直方向的大小,因为该大小由正在布局的子项的最大高度决定。我们处于布局循环中,可能根本不支持此用例。

相关问题