Silverlight中的自定义右对齐StackPanel控件布局

时间:2010-02-02 21:07:49

标签: silverlight layout silverlight-3.0 custom-panel

我正在尝试创建一个自定义布局容器,它具有与StackPanel相同的特性,但它会从屏幕右边缘开始布置项目。不用说它不能正常工作。

我在ArrangeOverride()里面找到了一条线

Point elementOrigin = new Point(this.DesiredSize.Width, 0);

只需创建一个点@ 0,0。换句话说this.DesiredSize.Width = 0.我知道测量步骤发生在排列步骤之前,所以我希望这个控件将设置DesiredSize属性。我怎么能从屏幕的右侧开始渲染呢?它甚至可能吗?

其次,传递给函数的 finalSize 参数远远大于我在测试xaml中定义的三个按钮所需的区域。有点像1676乘909,而要求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);
    }

1 个答案:

答案 0 :(得分:1)

您只需从desiredSize实施中返回MeasureOverride,您不希望调用此方法的基本版本,而是用您的方法替换默认实现。

与提供实现的ArrangeOverride类似,您要替换默认实现,因此不要调用此方法的基本版本。只需返回finalSize