当前位置: 首页 > news >正文

WPF篇(5)- Border控件(边框布局)+GridSplitter分割窗口

严格来说,Border并不是一个布局控件,因为它并不是Panel的子类,而是Decorator装饰器的子类,而Decorator继承于FrameworkElement。我们要先看看它的父类Decorator。

public class Decorator : FrameworkElement, IAddChild
{public Decorator();public virtual UIElement Child { get; set; }protected override int VisualChildrenCount { get; }protected internal override IEnumerator LogicalChildren { get; }protected override Size ArrangeOverride(Size arrangeSize);protected override Visual GetVisualChild(int index);protected override Size MeasureOverride(Size constraint);}

Decorator 装饰器只有一个Child 属性,说明Decorator只能容纳一个子元素(UIElement),也就是Border只能容纳一个子元素。

再看看Border的结构定义:

public class Border : Decorator
{public static readonly DependencyProperty BorderThicknessProperty;public static readonly DependencyProperty PaddingProperty;public static readonly DependencyProperty CornerRadiusProperty;public static readonly DependencyProperty BorderBrushProperty;public static readonly DependencyProperty BackgroundProperty;public Border();public Thickness BorderThickness { get; set; }public Thickness Padding { get; set; }public CornerRadius CornerRadius { get; set; }public Brush BorderBrush { get; set; }public Brush Background { get; set; }protected override Size ArrangeOverride(Size finalSize);protected override Size MeasureOverride(Size constraint);protected override void OnRender(DrawingContext dc);}
  • BorderThickness:设置Border边框的厚度(像素宽度)。
  • Padding:设置子元素相对于Border边框的距离。
  • CornerRadius:设置Border的圆角。
  • BorderBrush:设置Border边框的颜色画刷。
  • Background:设置Border的背景颜色画刷。

正是因为Border有这么多实用的属性, 所以, 我们通常在布局界面时,Border(装饰器)控件是首选。

    <WrapPanel Margin="10"><Border Height="35" Margin="10" Padding="5" BorderThickness="1" BorderBrush="Gray"><TextBlock  Text="矩形 - Border控件" Margin="5" /></Border><Border Height="35" Margin="10" Padding="5" BorderThickness="1" BorderBrush="Gray" CornerRadius="20"><TextBlock  Text="椭圆 - Border控件" Margin="5" /></Border><Border Width="150" Height="150" Margin="10" Padding="5" BorderThickness="1" Background="Red" BorderBrush="Gray" CornerRadius="75"><TextBlock  Text="圆形Border控件" Margin="5" HorizontalAlignment="Center" FontSize="16" FontWeight="Bold" VerticalAlignment="Center" Foreground="White"/></Border></WrapPanel>

在这里插入图片描述
我们分别写了3个Border,第一个Border被设计成矩形,第二个Border增加了圆角属性,第三个Border通过CornerRadius属性,将值设置为宽度或高度的一半,就形成了一个正圆。

GridSplitter分割窗口

GridSplitter控件用来分割窗体的布局,必须放在Grid栅格控件中配合使用,通过鼠标按住GridSplitter进行左右或上下拖动,即可调整行列尺寸。

注意:

  1. 如果你希望GridSplitter控件可以水平调整左右的Grid列宽时,那么HorizontalAlignment属性必须设置为Stretch或者Center。
  2. 如果你希望GridSplitter控件可以垂直调整行高,那么VerticalAlignment属性必须设置为Stretch或者Center。
  3. ShowsPreview属性表示拖动时是否及时绘制调整尺寸。
    <Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition Width="auto"/><ColumnDefinition/></Grid.ColumnDefinitions><Border Grid.Column="0" Background="LightBlue"><TextBlock TextWrapping="Wrap" Padding="10" LineHeight="20">1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111</TextBlock></Border><GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Center"   ShowsPreview="False"/><Border Grid.Column="2" Background="LightCoral"><TextBlock TextWrapping="Wrap" Padding="10" LineHeight="20">222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222</TextBlock></Border></Grid>

最好是为GridSplitter单独分配一行或者一列,同时,GridSplitter需要跨越整行或整列,这样的效果会更好。

如上面的代码所示,我们在Grid中分割了3个单元格(3列),将GridSplitter居在放置,简单设置一下GridSplitter的属性,就可以达到我们的目的了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux虚拟化技术的演进:Xen与KVM的历程与影响
  • 【Kubernetes】k8s集群之Pod容器资源限制和三种探针
  • 河南萌新联赛2024第(四)场:河南理工大学补题(B,C,I)
  • 软件测试面试题汇总,超详细整理。。。
  • 【https】无法安装OpenSSL时如何在局域网开通https服务
  • 常见8种数据结构
  • 好领导都会用三招管好下属!
  • 三数之和(LeetCode)
  • 全栈监控:一目了然的 IT 管理
  • 第13节课:Web Workers与通信——构建高效且实时的Web应用
  • MySQL笔记-基础篇(一):查询
  • EdgeWorkers 最佳实践丨助力流媒体创新
  • 深入理解 Java SPI - 概念、原理、应用
  • JavaScript基础(30)_事件的冒泡、事件的委派
  • 出行365:依托分布式数据库,让出行无忧 | OceanBase案例
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 4. 路由到控制器 - Laravel从零开始教程
  • Babel配置的不完全指南
  • dva中组件的懒加载
  • JS函数式编程 数组部分风格 ES6版
  • JS专题之继承
  • markdown编辑器简评
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • SSH 免密登录
  • 开源SQL-on-Hadoop系统一览
  • 力扣(LeetCode)965
  • 我看到的前端
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • Prometheus VS InfluxDB
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​第20课 在Android Native开发中加入新的C++类
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ​一些不规范的GTID使用场景
  • #07【面试问题整理】嵌入式软件工程师
  • #HarmonyOS:基础语法
  • (04)odoo视图操作
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C#)一个最简单的链表类
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (三)mysql_MYSQL(三)
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .axf 转化 .bin文件 的方法
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core跨平台微服务学习资源