2

複数行の機能を失うことなく、ラップ パネル内のコンテンツを引き延ばそうとしています。私の意図は、コンテンツが画面の幅よりも小さい場合、未定義のコンテンツがいっぱいになるように引き伸ばされることです。これは可能ですか?それは他の場所で行われましたか?

これまでに書いたコード:

    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);
    }

ただし、 Children は設定ではなく、取得のみを目的としています。この時点でそれを操作する他の方法はありますか?

ありがとう

4

1 に答える 1

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;
        }
    }
}
于 2012-09-22T17:37:49.847 に答える