在我的 Metro 应用程序中,我有一个包含一定数量项目(例如 25 个)的数据源。我有一个显示这些项目的 ListView。我的问题是 ListView 的大小允许它显示 6.5 个项目,因此它显示的最后一个项目被切成两半。如果分辨率改变,它可能会显示 4 个项目,或 8.2 个项目,或其他。我想要的是 ListView 准确显示适合控件高度的项目数量,而不是剪切最后一个项目。
现在,我看到两种可能的半解决方案,其中没有一个是最佳的:
-
将 ListView 的高度设置为项目大小的倍数的固定高度。这不会随着分辨率的变化而变化。
-
限制数据源中的项目数。这也无法扩展。
所以我的问题是,如何让 ListView 只显示完整的项目(所有边缘都在视口/列表视图内的项目),并隐藏其余部分?
ListView继承自ItemsControl,
因此,一种更优化的解决方案包括在 ItemsPanel 中注入自定义面板(通过自定义剪切显示覆盖测量)
像这样的东西(抱歉,我没有尝试编译):
protected override Size MeasureOverride(Size constraint)
{
if (this.VisualChildrenCount <= 0)
return base.MeasureOverride(constraint);
var size = ne Size(constraint.Width,0);
for(int i = 0; i < this.visualChildrenCount; i++)
{
child.Measure(size);
if(size.height + child.desiredSize > constraint.height)
break;
size.Height += child.DesiredSize;
}
return size;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)