我在这里找到了这个问题:How to populate a WPF grid based on a 2-dimensional array,我想使用标记的解决方案。而且它似乎也很好用,但是有一个问题,那个问题是我使用省略号来显示我的数据。所以每一项都等于一个椭圆。
这就是问题所在:椭圆在 Measure 上仅请求 x = 0,y = 0 的大小。所以我的问题是没有显示任何内容。所以我尝试创建一个自定义 Stackpanel:
public class StretchStackPanel : StackPanel
{
protected override Size MeasureOverride(Size constraint)
{
Size result = constraint;
result.Width = result.Width == Double.PositiveInfinity ? Double.MaxValue : result.Width;
result.Height = result.Height == Double.PositiveInfinity ? Double.MaxValue : result.Height;
if (this.Orientation == System.Windows.Controls.Orientation.Horizontal)
result.Height = result.Width / InternalChildren.Count;
return result;
}
protected override Size ArrangeOverride(Size arrangeSize)
{
var size = base.ArrangeOverride(arrangeSize);
double elementLength;
if (Orientation == System.Windows.Controls.Orientation.Horizontal)
elementLength = size.Width / InternalChildren.Count;
else
elementLength = size.Height / InternalChildren.Count;
double current = 0;
foreach (UIElement e in InternalChildren)
{
Rect result;
if (Orientation == System.Windows.Controls.Orientation.Horizontal)
{
result = new Rect(current, 0, elementLength, size.Height);
current += result.Width;
}
else
{
result = new Rect(0, current, size.Width, elementLength);
current += result.Height;
}
e.Arrange(result);
}
return size;
}
}
但是有一个非常奇怪的行为。项目之间的边距非常小,而且似乎是随机的。如果我调整大小,您可以看到它们在移动。
这是两个屏幕截图:
我还尝试使用仅包含列的 Uniformgrid 而不是 Stackpanel,并使用 Itemscontrol 周围的 ViewBox 设置具有固定高度的 itemstyle。