1WPF---常用布局

一.Day01-03

1.数据绑定

 

 

 改动通知到界面

2.常用布局控件

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:

  • None=0// 忽略鼠标和手写笔输入

  • Ink = 1// 允许用户绘制批注,默认模式。使用鼠标或者手写笔绘图时,会绘制笔画

  • GestureOnly = 2// 不远许用户绘制笔画批注,但会关注预先定义的特定姿势,由System.Windows.Ink.ApplicationGesture定义笔势

  • InkAndGesture = 3// 允许用户绘制壁画批注,也可以识别预先定义的姿势

  • Select = 4// 允许用户选择保存在Children集合中的元素,要选择一个元素用户必须单机该元素或者拖动套索选择该元素,一旦选择一个元素就可以移动该元素,改变其尺寸或将其删除

  • EraseByPoint = 5// 擦除鼠标选中的笔画

  • EraseByStroke = 6// 擦除选中的一笔,开始到结束都会擦除

 

 8.Border

装饰控件:背景色/边框    圆角    子对象也只能一个

主要属性配置:BorderBrush\BroderThinkness\Background\CornerRadius

使用场景:绘制边线 背景色、圆角(Rectangle) 使用非常频繁

WPF各布局源码地址:https://www.github.com/dotnet/wpf

3.WPF体系结构

DispatcherObject Dispatcher

DependencyObject

Visual-绘图对象

UIElement-布局、输入、焦点、事件;路由事件

FrameworkElement:对齐

Shape:Line、Path

Control:{TextBlock:FrameworkElement}支持控件模板 ContentCOntrol-》单一内容 ItemsControl-》集合子项(ListBox)

Panel-所有容器控件的基类-Grid、StackPanel

Border-装饰控件

 4.自定义布局

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 资源样式与模板

添加资源字典

 

放到

 资源的递归搜索

自身资源->父级资源->……->窗口资源->应用程序资源->框架系统资源

重用原则: 被广泛的重用,可以使用应用程序资源; 两三个窗口使用资源,建议在各个窗口分别定义

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF(Windows Presentation Foundation)是一种用于创建Windows应用程序的UI框架,提供了丰富的控件和布局控件,下面是对常用控件和布局控件的详细描述: 常用控件: 1. Button(按钮):用于触发特定操作或事件,如提交表单、打开对话框等。可以通过设置样式来自定义按钮的外观。 2. TextBox(文本框):用于接收用户输入的文本信息,如用户名、密码等。支持文本验证、自动完成等功能。 3. Label(标签):用于显示文本信息,如标题、说明等。可以设置字体、颜色、对齐方式等属性。 4. ComboBox(组合框):用于选择列表中的一项,可以是预定义选项或自定义输入。可以设置下拉列表展示方式、选中项等。 5. ListBox(列表框):用于显示列表中的多个项,用户可以选择其中的一项或多项。支持数据绑定和自定义项模板。 6. DataGrid(数据表格):用于展示和编辑数据集,支持排序、筛选、分组等功能。可以自定义列样式和编辑模式。 7. CheckBox(复选框):用于选择多个选项中的一个或多个。支持绑定Boolean值,可以设置选中状态和样式。 8. RadioButton(单选按钮):用于选择多个选项中的一个。可以使用GroupBox进行分组管理,支持绑定枚举值。 9. Slider(滑块):用于在一个范围内选择一个数值。可以设置最小值、最大值、刻度等属性,支持双向绑定。 10. Image(图片):用于显示图像文件或其他图形资源。支持设置源文件、缩放模式、透明度等属性。 布局控件: 1. Grid(网格):最常用布局控件,将子元素按照行和列的方式排列。可以设置行和列的大小、对齐方式等。 2. StackPanel(堆栈面板):将子元素按照水平或垂直方向依次排列。支持自动布局和可伸缩性。 3. WrapPanel(自动换行面板):将子元素按照水平或垂直方向排列,当空间不足时自动换行。适用于流式布局。 4. DockPanel(停靠面板):将子元素停靠在上、下、左、右或中心位置。支持设置停靠顺序和占位大小。 5. Canvas(画布):允许通过绝对定位来放置子元素。可以设置子元素的坐标和大小。 6. UniformGrid(均匀网格):将子元素按照指定的行列数均匀排列。可以设置行数、列数和对齐方式。 7. GridSplitter(网格分隔条):用于在Grid中调整行和列的大小。可以水平或垂直拖动来调整布局。 以上是WPF常用的控件和布局控件的详细描述,开发人员可以根据具体需求选择合适的控件和布局方式来设计用户界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值