迟到的 WPF 学习 —— 布局
布局是 WPF 很重头的一部分内容,这一部分梳理和记录关于布局章节的知识点。
1. WPF 使用一种基于流(Flow-based)的概念来处理布局逻辑,将传统的基于“坐标”的思想尽力的舍弃掉,而是用相对和智能的方式,它使得开发人员可以创建与显示分辨率和窗口大小无关的、在不同显示设备上可以进行缩放调整的用户界面——这听起来很梦幻哈
2. WPF 窗口智能包含一个元素,WPF 推荐的方式是窗体上放一个容器,容器里放若干元素或容器。这一点通过创建默认的 WPF 程序可以看出,XAML 代码在 Window 标签内默认生成一个 Grid 元素,想在添加一个同级的元素,Window 标签处将会出现波折号报错“属性Content只能设置一次”
3. WPF 所有的容器类都是派生自 System.Windows.Controls.Panel,一些核心容器包括:
StackPanel(在一个水平或垂直堆栈中放置元素)
WrapPanel(在一系列可换行中放置元素,纵横均可)
DockPanel(根据容器整个边界调整元素)
Grid(根据一个不可见表格在行列中调整元素)
UniformGrid(相比 Gird,它要求所有单元格具有相同尺寸)
Canvas(使用固定坐标定位元素,接近传统 Windows,但不提供锚点和停靠,因此不适合但可用于可调整大小的窗体)
4. 装饰元素是一种特殊的元素,通常用于在一个对象周围添加某种装饰效果,所有的装饰元素继承于 System.Windows.Controls.Decorator
5. UserLayoutRounding=true 属性将确保 WPF 将所有布局容器的内容对齐到最近的像素边界,从而保证不会出现因反锯齿而导致的显示内容模糊。例如,一个共宽 200 像素的 Grid 被分为两列,每列 100 像素宽,但显示设备宽度为 175 像素,这将导致每列实际宽度 87.5 像素,如果不应用该属性,将看到一个模糊的边界为了适应 0.5 的像素对齐而出现。
6. 尽管 Grid 布局控件十分灵活,Grid 中的元素也可以跨行跨列的显示,但显然这种灵活性伴随着不确定性和逻辑的复杂,一种推荐的经验是:对于一次性布局,如一组功能按钮,使用 StackPanel 更合适,为窗口多个布局使用一种一致性的结构,Grid 当然更方便。
迟到的 WPF 学习 —— 布局的更多相关文章
- 迟到的 WPF 学习 —— 入门
之所以说"迟到的",是因为我太晚才开始学习 WPF 了,之前 WPF 刚发布的时候有过粗浅了解,那时的 WPF 还非常简陋,VS 提供的内置控件十分匮乏,让我这样的非常依赖 Win ...
- 迟到的 WPF 学习 —— 依赖项属性
本章学习依赖项属性,英文原文 Dependency Property,它是传统 .Net Framework 属性的扩展,是 WPF 的专属,但所幸使用起来和传统属性几乎一样.WPF 元素所提供的大多 ...
- 迟到的 WPF 学习 —— 路由事件
1. 理解路由事件:WPF 通过事件路由(event routing)概念增强了传统的事件执行的能力和范围,允许源自某个元素的事件由另一个元素引发,例如,事件路由允许工具栏上的一个按钮点击的事件在被代 ...
- 迟到的 WPF 学习 —— 控件
这一章书中内容比较多而杂,但每个对象的内容又相对简短,所以只挑选里边有代表性的内容做记录. 1. Label 控件:一个基础的简单的 ContentControl,Labe 支持快捷键文本的设置,可以 ...
- WPF编程学习——布局
本文目录 1.布局简介 2.面板(Panel) 3.视图框(Viewbox) 4.滚动视图控件(ScrollViewer) 5.公共布局属性 1.布局简介 应用程序界面设计中,合理的元素布局至关重要, ...
- WPF学习(3)布局
今天我们来说说WPF的布局.我们知道WinForm的布局主要是采用基于坐标的方式,当窗口内容发生变化时,里面的控件不会随之动态调整,这就造成了一个很不好的用户体验.而WPF为了避免这个缺点,采用了基于 ...
- WPF学习开发客户端软件-任务助手(下 2015年2月4日代码更新)
时光如梭,距离第一次写的 WPF学习开发客户端软件-任务助手(已上传源码) 已有三个多月,期间我断断续续地对该项目做了优化.完善等等工作,现在重新向大家介绍一下,希望各位可以使用,本软件以实用性为主 ...
- WPF学习05:2D绘图 使用Transform进行控件变形
在WPF学习04:2D绘图 使用Shape绘基本图形中,我们了解了如何绘制基本的图形. 这一次,我们进一步,研究如何将图形变形. 例子 一个三角形,经Transform形成组合图形: XAML代码: ...
- WPF学习之路初识
WPF学习之路初识 WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...
随机推荐
- oracle_SQL 实验查询及删除重复记录 依据条件 (row)
除数据库表中的重复记录 根据条件 ① 创建表准备数据 创建表 tab_test -- Create table create table TAB_TEST ( ID NUMBER, NAME NVAR ...
- Eclipse 引导阮卓项目 No projects are found to import解
我们指示import当项目.由于一些git项目不.project和.classpath档.因此,直接import当然不是现有项目. 下面是解决方式: 1. new Android Project里面换 ...
- DevExpress中获取RichTextEdit中RichEditControl的两种方式
方式一: var rte = sender as RichTextEdit; control = rte.Controls[] as RichEditControl; 方式二: PropertyInf ...
- 九度OJ 1068 球半径和数量 (模拟)
题目1068:球的半径和体积 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4797 解决:1696 题目描写叙述: 输入球的中心点和球上某一点的坐标,计算球的半径和体积 输入: 球的中心 ...
- JS工具库之Lodash
破狼 JavaScript工具库之Lodash 2015-04-11 16:08 by 破狼, 235 阅读, 2 评论, 收藏, 编辑 你还在为JavaScript中的数据转换.匹配.查找等烦恼吗? ...
- asp.net 发邮件
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 批处理命令篇--配置免安装mysql 5.6.22, 以及1067错误的一个解决方法
mysql 服务启动出现1067错误的一个解决方法: 当服务启动出现1067错误时,可查看“windows 事件查看器”,发现类似错误提示 Can't find messagefile 'F:\ ...
- iOS发展 - 使用您自己的自定义字体
一位同事问我最后一次,XXapp字体如何萌啊? 我也想提出萌哒哒的字体!然后,今天有这blog. 首先,我们正处于iOS发展,苹果给了我们很多的字体,当然,我就不一一列举在这里,英文,小汤表示看不懂啦 ...
- js 实现自动换行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 自己编译的openwrt在开机时一直打印jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found...的错误提示
具体的输入信息是这样的. uboot> http Link down: eth0 Ethernet mode (duplex/speed): / Mbps HTTP server is star ...