首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面板ArrangeOverride和MeasureOverride方法

面板ArrangeOverride和MeasureOverride方法
EN

Stack Overflow用户
提问于 2013-10-30 09:06:27
回答 1查看 2.5K关注 0票数 3

有人能为这个函数提供一个简单的例子吗?我想意识到的是这样的事情:

当我有一个孩子-我想要显示在全屏上;

当我有两个孩子-我想要有相同的高度和宽度,并被显示在一个完整的一行;

当我有3个孩子时,就像这样:

代码语言:javascript
复制
|*************|
|   1  |   2  |
|*************|
|      3      |
|*************|

当我有4个孩子的时候:

代码语言:javascript
复制
|*************|
|   1  |   2  |
|*************|
|   3  |   4  |
|*************|

我怎样才能做到这一点?

致以问候。

编辑1:我认为这个面板可以继承UniformGrid。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-30 09:18:04

您似乎不需要覆盖MeasureOverride,因为您的面板将占用所有可用空间,因此您只需要在ArrangeOverride中实现您的放置逻辑,如下所示:

代码语言:javascript
复制
public class CustomPanel : Panel
{
    protected override Size ArrangeOverride(Size finalSize)
    {
        if (Children.Count == 1)
        {
            Children[0].Arrange(new Rect(new Point(0, 0), finalSize));
        }
        else if (Children.Count == 2)
        {
            var halfFinalSize = new Size(finalSize.Width, finalSize.Height/2);
            Children[0].Arrange(new Rect(new Point(0, 0), halfFinalSize));
            Children[1].Arrange(new Rect(new Point(0, finalSize.Height / 2), halfFinalSize));
        }
        else if (Children.Count == 3)
        {
            var halfFinalSize = new Size(finalSize.Width, finalSize.Height / 2);
            var quarterSize = new Size(finalSize.Width / 2, finalSize.Height / 2);

            Children[0].Arrange(new Rect(new Point(0, 0), halfFinalSize));
            Children[1].Arrange(new Rect(new Point(0, finalSize.Height / 2), quarterSize));
            Children[2].Arrange(new Rect(new Point(finalSize.Width / 2, finalSize.Height / 2), quarterSize));
        }
        else if (Children.Count == 4)
        {
            var quarterSize = new Size(finalSize.Width / 2, finalSize.Height / 2);
            Children[0].Arrange(new Rect(new Point(0, 0), quarterSize));
            Children[1].Arrange(new Rect(new Point(finalSize.Width / 2, 0), quarterSize));
            Children[2].Arrange(new Rect(new Point(0, finalSize.Height / 2), quarterSize));
            Children[3].Arrange(new Rect(new Point(finalSize.Width / 2, finalSize.Height / 2), quarterSize));
        }
        else if (Children.Count > 4)
        {
            //???
        }

        return base.ArrangeOverride(finalSize);
    }
}`

PS:确保孩子的数量少于5

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19677936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档