1
我試圖創建一個自定義佈局容器,它具有與StackPanel相同的特性,但它將從屏幕右邊緣開始的項目進行佈局。不用說,它不能正常工作。自定義右對齊Silverlight中的StackPanel控件佈局
我已經確定內部ArrangeOverride一個缺陷()其中線
Point elementOrigin = new Point(this.DesiredSize.Width, 0);
簡單地創建一個點@ 0,0。換句話說this.DesiredSize.Width = 0。據我所知,所述測量步驟發生在安排步驟之前,所以我希望這個控件將具有DesiredSize屬性集。我怎麼能從屏幕右側開始渲染呢?它甚至有可能嗎?
其次,finalSize傳遞給該函數的參數遠遠大於我在測試xaml中定義的三個按鈕所需的面積。到了90年代的1676年的曲調與250年前的60年左右。 謝謝。
這裏是我的代碼:
protected override Size MeasureOverride(Size availableSize)
{
Size availableSpace = new Size(double.PositiveInfinity, double.PositiveInfinity);
Size desiredSize = new Size(0, 0);
foreach (UIElement child in this.Children)
{
child.Measure(availableSpace);
desiredSize.Width += child.DesiredSize.Width;
desiredSize.Height = Math.Max(desiredSize.Height, child.DesiredSize.Height);
}
return base.MeasureOverride(desiredSize);
}
protected override Size ArrangeOverride(Size finalSize)
{
Point elementOrigin = new Point(this.DesiredSize.Width, 0);
foreach (UIElement child in this.Children)
{
Rect childBounds = new Rect(elementOrigin, child.DesiredSize);
elementOrigin.X -= child.DesiredSize.Width;
child.Arrange(childBounds);
}
return base.ArrangeOverride(finalSize);
}