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;
                
            }



  • 相关阅读:
    【Tools】xshell添加命令按钮Button
    【Optimization】ARM的寻址方式(详细)
    【Python】python文件或文本加密(4种方法)
    【Optimization】常用SSE Intrinsic指令总结
    【Optimization】X86汇编快速入门
    【Base】如何理解Latency和Throughput: 吞吐量和延迟
    【Cmd】Windows下批处理常用命令总结
    【Optimization】SSE指令集学习:Compiler Intrinsic
    【ASM】汇编指令movdqa与movdqu的区别
    anaconda
  • 原文地址:https://www.cnblogs.com/ngnetboy/p/2439352.html
Copyright © 2011-2022 走看看