zoukankan      html  css  js  c++  java
  • 【windows phone】自定义控件的创建

    书上说Grid,SrackPane,Canvas都是从Panel类中继承来的,如果想要自己写一个DIY的控件,就需要重写Panel中的ArrangeOverride和MeasureOverride方法;笔者刚开始在书上看了一个自定义控件——蜂窝式控件。效果如下图所示:

    然后自己有查阅资料自己做了一个锯齿状的DIY控件,效果如下图所示:

    其实做这样的控件并不困难,至于要重写Panel类中的ArrangeOverride和MeasureOverride方法即可;

    MeasureOverride方法是定义一个控件大小,ArrangeOverride方法是排列所定义的控件;

    蜂窝状控件实现步骤如下:

    一:创建一个class文件;

    二:继承panel类;

    三:在类中插入如下代码;

            protected override Size MeasureOverride(Size availableSize)
            {
                int i = 0;
                foreach (FrameworkElement child in Children)
                {
                    if (i < 15)
                    {
                        child.Measure(new Size(100, 100));//自定义一个宽度和长度
                    }
                    else
                    {
                        child.Measure(new Size(0, 0));
                    }
                    i++;
    
                }
                return new Size(600, 600);
            }
    
            protected override Size ArrangeOverride(Size finalSize)
            {
                UIElementCollection mychildren = Children;
                int count = mychildren.Count;
                for (int i = 0; i < count; i++)
                {
                    Point cellOrigin = GetCellOrigin(i);  //坐标
                    double dw = mychildren[i].DesiredSize.Width;
                    double dh = mychildren[i].DesiredSize.Height;
                    mychildren[i].Arrange(new Rect(cellOrigin.X, cellOrigin.Y, dw, dh));//排列控件
                    //Rect描述矩形的宽度、高度和位置。x System.Double 矩形左边的 x 坐标位置。y System.Double 矩形上边的 y 坐标位置。
    
    
                }
                return new Size(300, 600);
            }
    
            protected Point GetCellOrigin(int cellIndex)
            {
                int cellRow, cellColomn;
                cellColomn = cellIndex % 3;
                cellRow = cellIndex / 3;
    
                int x, y;
                x = cellColomn * 100;
                y = cellRow * 100;
                if (cellColomn == 1)
                    y += 50;
    
                Point cellOrigin = new Point(x, y);
                return cellOrigin;
    
            }

    锯齿状控件代码如下:

            protected override Size MeasureOverride(Size availableSize)
            {
                int i = 0;
                foreach (UIElement ue in Children)
                {
                    if (i < 6)
                    {
                        ue.Measure(new Size(100, 100));
                        i++;
                    }
                    else
                    {
                        ue.Measure(new Size(0, 0));
                    }
                }
    
                return new Size(200, 600);
            }
    
            protected override Size ArrangeOverride(Size finalSize)
            {
                UIElementCollection child = Children;
                int count = child.Count;
                for (int i = 0; i < count; i++)
                {
                    Point pt = setPoint(i);
                    double width = child[i].DesiredSize.Width;
                    double height = child[i].DesiredSize.Height;
                    child[i].Arrange(new Rect(pt.X, pt.Y, width, height));
                }
    
                return new Size(200, 600);
            }
    
            protected Point setPoint(int index)
            {
                int cellColomn;
                cellColomn = index % 2;
    
                int x, y;
                y = index * 80;
                x = cellColomn * 100;
                if (cellColomn == 1)
                {
                    x -= 20;
                    
                }
                Point pt = new Point(x,y);
                return pt;
                
            }



  • 相关阅读:
    MFC TeeChart 用法整理二 (画二维图)
    CFileFind类的详解以及应用实例
    error C2065: 'AfxCriticalTerm' : undeclared identifier 解决办法
    error LNK2001
    ShellExecute详细用法(可以单独打开一个文件)
    java连接SQL Server数据库
    Java 异常处理
    eclipse 无法自动匹配
    Java简单的表格模型
    Java 字符串常用操作(String类)
  • 原文地址:https://www.cnblogs.com/ngnetboy/p/2439352.html
Copyright © 2011-2022 走看看