2

ここでこの質問を見つけました:2次元配列に基づいてWPFグリッドを作成する方法と、マークされたソリューションを使用したかった. また、非常にうまく機能しているように見えますが、問題が 1 つあります。その問題は、楕円を使用してデータを表示していることです。したがって、すべてのアイテムが 1 つの楕円に相当します。

ここに問題があります: 楕円は 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;
    }
}

しかし、非常に奇妙な動作があります。アイテムの間には非常に小さなマージンがあり、ランダムに見えます。サイズを変更すると、それらが動いているのがわかります。

2 つのスクリーンショットを次に示します。

ここに画像の説明を入力 ここに画像の説明を入力

また、Stackpanel の代わりに列のみの Uniformgrid を使用し、Items コントロールの周りに ViewBox を使用して固定高さの itemstyle を設定しようとしました。

4

0 に答える 0