【发布时间】:2019-03-26 04:17:45
【问题描述】:
我正在使用 ItemsControl 来显示 1 - 10 个项目(通常是 2 - 4)的列表。我正在努力满足所有这些要求:
- 所有行的高度必须相同
- 如果可能,所有行都应显示在最大 300 的高度。
- 如果没有足够的空间以 300 高显示所有行,则显示在尽可能高的高度。
- 如果最大可能高度小于 150,则以最大尺寸显示并使用滚动条
- 如果行没有填满页面,则必须在顶部垂直对齐
这是我目前所拥有的:
<Window x:Class="TestGridRows.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:TestGridRows"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance vm:MainViewModel}"
Height="570" Width="800">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsControl ItemsSource="{Binding Path=DataItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border MinHeight="150" MaxHeight="300" BorderBrush="DarkGray" BorderThickness="1" Margin="5">
<TextBlock Text="{Binding Path=TheNameToDisplay}" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="1" IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
</Window>
对于 4 个以上的项目,滚动条显示正确,但项目的大小都为 150,而不是 300:
问题
当只有 1 个项目时,如何将内容对齐到顶部? (没有明显破坏其他功能)
额外问题:当有 4 个以上的项目时,如何让项目调整为 maxheight 而不是 minheight?
【问题讨论】:
-
一般
MinHeight以这种方式工作,如果您的项目高度的值小于定义的最小值,它会显示最小值,MaxHeight也是如此。所以你得到的完全是意料之中的。您的商品的高度值可能低于您的平均值 (200)。 -
@LionKing 我的项目的 ScrollViewer 的 ActualHeight 为 570。我一直在试验 1、2、3 和 5 行,它们都表现出相同的行为
-
@JumpingJezza:听起来您想使用 Grid 作为 ItemsControl 的面板:blog.scottlogic.com/2010/11/15/…
-
怎么样。用网格替换滚动查看器,用列表框替换项目控制。在列表框上设置垂直对齐顶部。计算视图或视图模型中的行高并在样式中设置。
-
@Andy 如果我更换滚动查看器,那么如何滚动 4+ 项?
标签: wpf xaml layout scroll itemscontrol