zoukankan      html  css  js  c++  java
  • Application=Code+Markup 读书笔记 57章

    5 StackPanelWrapPanel

    WPF设计了面板panel,将空间和其它元素放在面板上,称之为Layout布局。

    类的逻辑树:

           FrameworkElement
                  Panel(抽象类)
                         Canvas
                         DockPanel
                         Grid
                         StackPanel
                         UniformGrid
                         WrapPanel

    1)检索元素的方法:

    FrameworkElementFindName方法,检索这个根节点下的所有元素:

                Button btn = FindName("ButtonName") as Button;

    使用面板的Children索引:

                grid.Children[5];    //返回UIElement类型

                grid.Children.IndexOf(btn);        //返回btn元素所在的索引值,不存在则为-1

    通过事件处理器,获取产生事件的对象,有两种方法:

                Button btn = sender as Button;     //使用第一个参数

                Button btn = e.Source as Button;   //使用第二个参数

    以上代码对应于:

                btn.Click += ButtonClick;

    以及

            void ButtonClick(Object sender, RoutedEventArgs e) { }

    事件处理器的另一种情形,就是不使用的btn.Click += ButtonClick方式为每一个Button添加事件,而是代替使用:

                AddHandler(Button.ClickEvent, new RoutedEventHandler(ButtonClick));

    此时,sender就是Window对象,这就意味着Window会监视其所有的子元素的Click事件;而e.Source仍然是被点击的按钮对象。

    当然,也可以让所有Button的承载器StackPanel来进行监视:

                stack.AddHandler(Button.ClickEvent, new RoutedEventHandler(ButtonClick));

    此时,sender就是StackPanel对象。

    2)使用WrapPanel时,一般搭配ScrollViewer

                ScrollViewer scroll = new ScrollViewer();
                Content 
    = scroll;
                WrapPanel wrap 
    = new WrapPanel();
                scroll.Content 
    = wrap;

    3)对于ScrollViewer的使用,这是一个复合控件,其滚动条端点的箭头,是一个RepeatButton,这个按钮上也有Click事件。所以在ScrollViewerClick方法中,要判断e.Source的转型是否成功:

                Button btn = e.Source as Button;

                
    if (btn != null)
                

                    
    //do something
                }

    4)在有限的空间内放入很多元素,传统使用ScrollViewerWPF建议使用ViewBox

                Viewbox view = new Viewbox();
                Content 
    = view;
                view.Child 
    = grid;

    第6 StackWrap

    1GridSplitter

    GridSplitter派生于Thumb,只能使用于Grid,而且要指定它所在的rowcolumn位置(以及行和列的span)

                GridSplitter split = new GridSplitter();
                split.Width 
    = 6;
                grid.Children.Add(split);
                Grid.SetColumn(split, 
    2);
                Grid.SetRow(split, 
    1);

    GridSplitter可以和其它元素共享相同的单元格,这就存在被遮挡的问题——后出现的元素在前面,为此,需要设置margin,以避免重叠:

                split.Margin = new Thickness(10);

    一般会让GridSplitter跨越整行或整列,比较合理:

                Grid.SetRowSpan(split, 3);

                Grid.SetColumnSpan(split, 3);

    一般把GridSplitter单独放在一个或一组单元格中

    2UniformGrid

    类似于Grid,不同之处在于,UniformGrid所有行都等宽,所有列都等高,可以简单进行设置:

                UniformGrid unigrid = new UniformGrid();
                unigrid.Rows 
    = 2;
                unigrid.Columns 
    = 3;

    UniformGrid没有附属属性,来为其内部的元素指定位置,只能根据加入元素的顺序,依次增加索引值。

                   Unigrid.Children.Add(btn);

    7

    1Polygon的使用:

                Polygon poly = new Polygon();

                poly.Points = new PointCollection();

    新建立的Polygon对象,其Points属性为null。为此之后要添加一系列Point到其中:

                poly.Points.Add(new Point(0, 0));

                poly.Points.Add(new Point(1, 1));

    另一种使用方法,直接添加Point数组:

                poly.Points = new PointCollection(new Point[]
                
    {
                    
    new Point(0,0),
                    
    new Point(1,1)
                }
    );
  • 相关阅读:
    用户场景分析
    团队项目个人工作总结(4月22日)
    团队项目个人工作总结(4月21日)
    团队项目个人工作总结(4月20日)
    第九周学习进度情况
    站立会议10-个人总结
    站立会议9-个人总结
    站立会议8-个人总结
    textarea中文提交乱码问题解决
    站立会议7-个人总结
  • 原文地址:https://www.cnblogs.com/Jax/p/1189041.html
Copyright © 2011-2022 走看看