リストボックスとパネルの間に何かを実装する必要があります。独自のスタイルのないバインド可能なアイテムソースが必要です。そこで、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 回呼び出そうとしました。いずれにせよ、ボタンはユーザーコントロールに表示されたくありません。
私が間違っていることを特定するのを手伝ってください!