我正在尝试拉伸包装面板中的内容,而不会失去多线的能力。我的意图是,如果内容小于屏幕的宽度,那么它将拉伸任何未定义的内容以填充。这可能吗?它在其他地方完成了吗?
到目前为止我写的代码:
protected override System.Windows.Size ArrangeOverride(System.Windows.Size finalSize)
{
if (this.Children.Count == 0)
return base.ArrangeOverride(finalSize);
if (FlexibleColumn == null)
return base.ArrangeOverride(finalSize);
double totalWidth = 0;
for (int i = 0; i > Children.Count; i++)
{
if (i == FlexibleColumn)
continue;
totalWidth = totalWidth + Children[i].DesiredSize.Width;
}
if (totalWidth < finalSize.Width)
{
Children[FlexibleColumn].DesiredSize.Width = finalSize.Width - totalWidth;
}
return base.ArrangeOverride(finalSize);
}
然而,孩子只是为了获取,而不是设定。还有其他任何想要操纵它的人吗?
由于
答案 0 :(得分:0)
有许多自定义包装:( http://www.codeproject.com/Articles/32629/A-better-panel-for-data-binding-to-a-WrapPanel-in)
基本上你必须覆盖MeasureOverride方法
提示是设置WrapPanel中存在的ItemWidth属性。例如:
if (Orientation == Orientation.Horizontal)
{
double supostWidth = 0.0;
foreach (UIElement el in Children)
{
el.Measure(availableSize);
Size next = el.DesiredSize;
if (!(Double.IsInfinity(next.Width) || Double.IsNaN(next.Width)))
{
supostWidth = Math.Max(next.Width, supostWidth);
}
}
double totalWidth = availableSize.Width;
if (!double.IsNaN(supostWidth) && !double.IsInfinity(supostWidth) && supostWidth > 0)
{
var itemsPerRow = (int)(totalWidth / supostWidth);
if (itemsPerRow > 0)
{
ItemWidth = totalWidth / itemsPerRow;
}
}
}