在我们的应用程序中,我们在网格中有一些ListViews和ListBoxes,您可以借助网格分割器更改控件的实际高度。 这样做时,您可以排列ListBox的高度,因此其中一个项目不完全可见,因为ListView变短以显示它。
这是我们不想要的行为。
从我的研究到目前为止,似乎没有办法阻止ListBox或ListView显示部分项目,但也许有人找到另一种方法来处理这个问题。也许当物品只有一半可见时,物品可以触发它自己不可见。但我们怎么能找到答案呢?
我们欢迎任何建议。
答案 0 :(得分:1)
我无法以这种方式修复ListView。但是,对于ListBox,您可以覆盖ArrangeOverride并自行排列项目。堆叠您想要查看的项目,并排列您不希望看到的项目(例如,部分可见的项目),以便它们不可见。例如,非虚拟化版本:
/// <summary>
/// Used to arrange all of the child items for the layout.
/// Determines position for each child.
/// </summary>
/// <param name="finalSize">Parent passes this size in</param>
/// <returns>Parent size (always uses all of the allowed area)</returns>
protected override Size ArrangeOverride(Size finalSize)
{
// Arrange in a stack
double curX = 0;
double curY = 0;
foreach (UIElement child in InternalChildren)
{
double nextY = curY + child.DesiredSize.Height;
if (nextY > finalSize.Height) // Don't display partial items
child.Arrange(new Rect());
else
child.Arrange(new Rect(curX, curY, child.DesiredSize.Width, child.DesiredSize.Height);
curY = nextY;
}
return finalSize;
}
答案 1 :(得分:0)
您只需将MinHeight或MinWidth设置为您要调整大小的单元格。试试这个:
<Grid>
<Grid.RowDefinitions>
<RowDefinition MinHeight="50"/>
<RowDefinition Height="Auto"/>
<RowDefinition MinHeight="50"/>
</Grid.RowDefinitions>
<ListBox HorizontalAlignment="Center" Margin="10">
<ListBoxItem>First</ListBoxItem>
<ListBoxItem>Second</ListBoxItem>
<ListBoxItem>Third</ListBoxItem>
<ListBoxItem>Fourth</ListBoxItem>
</ListBox>
<GridSplitter Grid.Row="1" Height="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
<ListView Grid.Row="2" Margin="4">
<ListViewItem>First</ListViewItem>
<ListViewItem>Second</ListViewItem>
<ListViewItem>Third</ListViewItem>
<ListViewItem>Fourth</ListViewItem>
</ListView>
</Grid>