赞
踩
改动通知到界面
1.Grid面板:功能最强大,布局最灵活的容器
基本属性: 行定义:RowDefinitions->RowDefinition(Height:*/auto/数字) 列定义:ColumnDefinitions->ColumnDefinition(Width: */auto/数字) 尺寸共享:Grid.IsSharedSizeScope=“True” 配合行/列中的SharedSizeGroup属性 - 附加属性: Grid.Row/Grid.Column 如果是第0行或第0列,可以省略
2. StackPanel堆栈
最简单的布局容器之一,基本特性水平或垂直排队,从下往上,从右往左
主要属性配置: Orientation(布局的方向)
3.DockPanel停靠
通过设置Dock停靠进行布局
主要属性配置: - 基本属性:LastChildFill - 附加属性: DockPanel.Dock(Left/Top/Right/Bottom)
技巧:alt+箭头移动顺序
4.WrapPanel流式布局
唯一一个不能被Grid替代的布局控件,按行排列,尺寸不够时换行;按列排列,尺寸不够时折行
主要属性配置: Orientation
5.UniformGrid
另一种行列风格布局,自动生成统一一致的行列
主要属性配置:Rows、Columns,进行行数以及列数的指定
6.Canvas
通过精确坐标定位放置子元素
主要属性配置: - 附加属性:Canvas.Left/Canvas.Top/Canvas.Right/Canvas.Bottom
Panel.ZIndex=””可以指定优先显示层级
7.InkCanvas
支持任意笔画输入的画布组件
主要属性配置: - 基本属性: EditingModel、Strokes(获取所有笔迹)、DefaultDrawingAttributes(设置笔迹样式) GestureOnly 配合手势操作 - 附加属性: InkCanvas.Left/InkCanvas.Top/InkCanvas.Right/InkCanvas.Bottom
EditingModel:
8.Border
装饰控件:背景色/边框 圆角 子对象也只能一个
主要属性配置:BorderBrush\BroderThinkness\Background\CornerRadius
使用场景:绘制边线 背景色、圆角(Rectangle) 使用非常频繁
WPF各布局源码地址:https://www.github.com/dotnet/wpf
DispatcherObject Dispatcher
DependencyObject
Visual-绘图对象
UIElement-布局、输入、焦点、事件;路由事件
FrameworkElement:对齐
Shape:Line、Path
Control:{TextBlock:FrameworkElement}支持控件模板 ContentCOntrol-》单一内容 ItemsControl-》集合子项(ListBox)
Panel-所有容器控件的基类-Grid、StackPanel
Border-装饰控件
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows;
- using System.Windows.Controls;
-
- namespace Zhaoxi.WPFStudy
- {
- public class ZxStackPanel : Panel
- {
- // 从上向下的累积
- // 第一个子项 第一个
- // 第二个子项 在第一个子项的高度下面
- // 第三个子项 在第二个子项的高度+第一个子项的高度
- // 。。。。。
-
- // 两个过程:
- // 测量:
- // 排列
-
- List<ListItem> children = new List<ListItem>();
- // 测量:主要是对子控件进行期望尺寸的测量
- protected override Size MeasureOverride(Size availableSize)
- {
- //Size size = new Size(availableSize.Width / 4, availableSize.Height);
- // 记录所有子控件的整体高度
- double height = 0;
- // 遍历子控件,对控件一一进行测量动作
- foreach (FrameworkElement item in this.InternalChildren)
- {
- int index = ZxStackPanel.GetIndex(item);
- // 添加到临时集合,供后续排序用
- children.Add(new ListItem { Control = item, Index = index });
- // 控件测量->得到控件的期望尺寸DesiredSize
- item.Measure(availableSize);
- //
- height += item.DesiredSize.Height;
- }
-
- // 通过依赖附加属性对子控件进行排序
- children = children.OrderBy(c => c.Index).ToList();
- // 根据指定序号进行调整
- int i = 0;
- while (i < children.Count)
- {
- if (children[i].Index > 0)
- {
- ListItem item = children[i];
- children.RemoveAt(i);
- children.Insert(item.Index, item);
- }
- else
- i++;
- }
-
- // 返回所有子控件所需要的Size,可能比容器大小要大:availableSize
- return new Size(availableSize.Width, height);
- }
-
- // 排列:最终子控件在放在哪个位置(坐标)上
- // finalSize等于MeasureOverride返回值
- protected override Size ArrangeOverride(Size finalSize)
- {
- // 记录所有子控件的整体高度
- double height = 0;
- foreach (ListItem item in children)
- {
- // 将Item子项放到特定的位置 ,主要是在Rect的X和Y,大小由Rect的Width和Height决定
- item.Control.Arrange(new Rect(0, height, finalSize.Width, item.Control.DesiredSize.Height));
- //
- height += item.Control.DesiredSize.Height;
- }
-
- return finalSize;
- }
-
-
- // 需求:StackPanel中的子项进行顺序调整
- public static int GetIndex(DependencyObject obj)
- {
- return (int)obj.GetValue(IndexProperty);
- }
-
- public static void SetIndex(DependencyObject obj, int value)
- {
- obj.SetValue(IndexProperty, value);
- }
- public static readonly DependencyProperty IndexProperty =
- DependencyProperty.RegisterAttached("Index", typeof(int), typeof(ZxStackPanel), new PropertyMetadata(0));
-
- //private int _index;
-
- //public int Index
- //{
- // get { return _index; }
- // set { _index = value; }
- //}
-
- //
-
- // 指定子项的区域大小 大中小
- }
-
- class ListItem
- {
- public FrameworkElement Control { get; set; }
- public int Index { get; set; }
- }
- }
实现效果
二.Day04 窗口对象&资源系统
1.无边框窗体
2.异性窗体
3.文件资源
图片需要调成资源
音视频、Gif 必须复制到本地加载
使用全路径:
<Image Source="pack://application:,,,/WPF_04;component/Assets/img101.png"/>
pack://application:,,,[/程序集名称;][版本号;][公匙;]component/Assets/img101.png
4.iconfont使用
设置为资源
5.资源绑定(对象资源 )
------
6.资源引用问题
三.Day05 资源样式与模板
添加资源字典
放到
资源的递归搜索
自身资源->父级资源->……->窗口资源->应用程序资源->框架系统资源
重用原则: 被广泛的重用,可以使用应用程序资源; 两三个窗口使用资源,建议在各个窗口分别定义
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。