【问题标题】:Custom Right Aligned StackPanel control layout in SilverlightSilverlight 中的自定义右对齐 StackPanel 控件布局
【发布时间】:2010-02-02 21:07:49
【问题描述】:

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

我在 ArrangeOverride() 中发现了一个缺陷,其中行

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

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

其次,传递给函数的 finalSize 参数比我在测试 xaml 中定义的三个按钮所需的区域大得多。大约 1676 x 909 与所需的 250 x 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);
    }

【问题讨论】:

    标签: silverlight layout silverlight-3.0 custom-panel


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-17
      • 1970-01-01
      • 2015-09-30
      • 2011-04-29
      • 2014-09-16
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 2021-08-08
      相关资源
      最近更新 更多