0

リストボックスとパネルの間に何かを実装する必要があります。独自のスタイルのないバインド可能なアイテムソースが必要です。そこで、FrameworkElement から派生させることにしました。コード ビハインドで新しいボタンをコントロールに追加しようとしましたが、ItemsSource プロパティを変更すると、InvalidateMeasure を呼び出します。MeasureOverride メソッドでは、itemssource コレクションを実行し、各項目のパラメーターとして availableSize を指定して Measure を呼び出します。しかし、結果として、itemssouce内のコントロール(私の場合はボタン)のDesiredSizeが奇妙になりました-高さ16、幅0。それは私のコードです:

    // part from usercontrol's code behind  
    public MainPage()
    {
        InitializeComponent();

        dash.ItemsSource.Add(new Button { Content = "button 1 content", Padding = new Thickness(10) });
        dash.ItemsSource.Add(new Button { Content = "button 2 content", Padding = new Thickness(10) });
    }

    //part from my control
    protected override Size MeasureOverride(Size availableSize)
    {
        var desiredSize = new Size();
        foreach (UIElement item in ItemsSource)
        {
            item.Measure(availableSize);
            desiredSize.Height += item.DesiredSize.Height;
            desiredSize.Width += item.DesiredSize.Width;
        }
        return desiredSize;
    }

    protected override Size ArrangeOverride(Size finalSize)
    {           
        double x = 25, y = 25;
        foreach (FrameworkElement item in ItemsSource)
        {
            item.Arrange(new Rect(x, y, item.DesiredSize.Width, item.DesiredSize.Height));
        }

        return base.ArrangeOverride(finalSize);
    }

項目の高さと幅を手動で設定しようとしましたが、うまくいきません。new Size(double.PositiveInfinity,double.PositiveInfinity); で初めて Measure を 2 回呼び出そうとしました。いずれにせよ、ボタンはユーザーコントロールに表示されたくありません。

私が間違っていることを特定するのを手伝ってください!

4

1 に答える 1