grid布局方式(gridbaglayout布局) 科技前沿 • 2025-04-14 11:26 • 阅读 29 grid布局方式(gridbaglayout布局)p 本主题介绍 Windows Presentation Foundation WPF 布局系统 了解布局计算发生的方式和时间对于在 WPF 中创建用户界面非常重要 p 本主题包含以下各节 元素边界框 布局系统 测量和排列子元素 面板元素和自定义布局行为 布局性能注意事项 子像素渲染和布局舍入 后续步骤 在 大家好,我是讯享网,很高兴认识大家。 </nav><p>本主题介绍 Windows Presentation Foundation (WPF) 布局系统。 了解布局计算发生的方式和时间对于在 WPF 中创建用户界面非常重要。</p> 讯享网 本主题包含以下各节: 元素边界框 布局系统 测量和排列子元素 面板元素和自定义布局行为 布局性能注意事项 子像素渲染和布局舍入 后续步骤 在 WPF 中构思布局时,了解环绕所有元素的边界框非常重要。 布局系统使用的每个 都可以被视为嵌入到布局中的矩形。 类返回元素的布局分配或布局槽的边界。 矩形的大小是通过计算可用屏幕空间、任何约束的大小、特定于布局的属性(如边距和填充)以及父 元素的个别行为来确定的。 处理此数据时,布局系统能够计算特定 的所有子级的位置。 请务必记住,调整在父元素(如 )上定义的特性的大小会影响其子级。 下图显示了一个简单的布局。 讯享网 可以通过使用以下 XAML 实现此布局。 讯享网 单个 元素托管在 中。 虽然文本仅填充第一列的左上角,但 的分配空间实际上要大得多。 可以使用 方法检索任何 的边界框。 下图显示 元素的边界框。 如黄色矩形所示, 元素的分配空间实际上远大于所显示的空间。 由于还有其他元素添加到 中,这种分配可能会收缩或扩展,具体取决于所添加元素的类型和大小。 使用 方法将 的布局槽转换为 。 此方法可用于显示元素的边界框。 讯享网 简单地说,布局是一个递归系统,实现对元素进行大小调整、定位和绘制。 更具体地说,布局描述测量和排列 元素的 集合的成员的过程。 布局是一个密集的过程。 集合越大,必须进行的计算次数就越多。 根据拥有该集合的 元素所定义的布局行为,还可能会增加复杂性。 相对简单的 (如 )可以比更复杂的 (如 )具有更好的性能。 每当子 改变其位置时,布局系统都可能触发一个新的传递。 因此,了解哪些事件会调用布局系统就很重要,因为不必要的调用可能导致应用程序性能变差。 下面描述调用布局系统时发生的过程。 子 通过首先测量其核心属性来开始布局过程。 计算 上定义的大小调整属性,例如 、 和 。 应用 特定的逻辑,例如 方向或堆叠 。 测量所有子级后排列内容。 在屏幕上绘制 集合。 如果向集合添加了其他 ,应用了 ,或者调用了 方法,则会再次调用该过程。 以下各节更详细地定义了此过程及其调用方式。 布局系统为 集合的每个成员完成两个过程:一个测量过程和一个排列过程。 每个子 都提供自己的 和 方法来实现自己的特定布局行为。 在测量过程中,会计算 集合的每个成员。 此过程从调用 方法开始。 需要在父 元素的实现中调用此方法,而不必为要出现的布局显式调用该方法。 首先,计算 的本机大小属性,例如 和 。 这将生成一个名为 的值,该值将传递给 。 其次,处理在 上定义的框架属性,这会影响 的值。 这些属性通常描述基础 的大小调整特性,例如其 、、 和 。 其中每个属性都可以更改显示元素所需的空间。 然后使用 作为参数调用 。 测量过程的最终目标是让子元素确定其 ,这发生在 调用期间。 存储 值,供在内容排列过程中使用。 排列过程从调用 方法开始。 在排列过程中,父 元素会生成一个表示子元素边界的矩形。 该值将传递给 方法进行处理。 方法计算子元素的 ,并且计算可能影响元素呈现大小的任何其他边距。 生成一个 ,后者作为参数传递给 的 方法。 生成子元素的 。 最后, 方法执行偏移量属性(如边距和对齐)的最终计算,并将子元素放在其布局槽内。 子元素不需要(并且通常不)填充整个分配空间。 然后将控件返回给父级 ,布局过程即告完成。 WPF 包含一组派生自 的元素。 这些 元素支持许多复杂的布局。 例如,使用 元素可以轻松实现堆叠元素,而使用 可实现更复杂和自由流动的布局。 下表汇总了可用的布局 元素。 面板名称 说明 定义一个区域,可在其中通过相对于 区域的坐标显式定位子元素。 定义一个区域,可在其中使子元素相互水平或垂直排列。 定义由列和行组成的灵活的网格区域。 将子元素排列成水平或垂直的一行。 为虚拟化其子数据集合的 元素提供一个框架。 这是一个抽象类。 按从左到右的顺序位置定位子元素,在包含框的边缘处将内容切换到下一行。 排序顺序是从上到下还是从右到左,取决于 属性的值。 对于需要使用任何预定义的 元素都无法实现的布局的应用程序,可以通过继承 并替代 和 方法来实现自定义布局行为。 布局是一个递归过程。 集合中的每个子元素都会在每次调用布局系统期间得到处理。 因此,应避免在不必要时触发布局系统。 以下注意事项有助于实现更好的性能。 应注意哪些属性值更改会强制执行布局系统的递归更新。 如果依赖属性的值可能导致布局系统被初始化,则会使用公共标志对该依赖属性进行标记。 和 提供了有用的线索,说明哪些属性值更改会强制执行布局系统的递归更新。 一般来说,任何可能影响元素边界框大小的属性都应将 标志设置为 True。 有关详细信息,请参阅依赖项属性概述。 如果可能,请使用 而不是 。 是一种影响用户界面 (UI) 内容的非常有用的方式。 但是,如果转换效果不需要影响其他元素的位置,则最好改用 ,因为 不会调用布局系统。 会应用其转换,并强制执行递归布局更新以获得受影响元素的新位置。 避免对 进行不必要的调用。 方法会强制执行递归布局更新,通常是不必要的。 除非你确定需要进行完整更新,否则请依赖布局系统为你调用此方法。 在处理大型 集合时,请考虑使用 而不是常规的 。 通过虚拟化子集合, 仅在内存中保留当前位于父级视区内的对象。 因此,在大多数情况下,性能得到显著提高。 WPF 图形系统使用与设备无关的单元来使分辨率和设备独立。 每个与设备无关的像素都会随着系统的每英寸点数 (dpi) 设置自动进行缩放。 这为 WPF 应用程序提供了不同 dpi 设置的适当缩放,并使应用程序自动感知 dpi。 但是,这种 dpi 无关性可能由于抗锯齿而呈现出不规则的边缘。 这些伪影通常被视为模糊或半透明边缘,当边缘的位置落在设备像素的中间而不是设备像素之间时,就可能出现。 布局系统提供了一种通过布局倒圆对此进行调整的方法。 布局舍入是布局系统在布局传递中舍入任何非整数像素值的情况。 默认情况下禁用布局舍入。 若要启用布局舍入,请在任何 上将 属性设置为 。 因为它是一个依赖属性,所以该值将传播到可视化树中的所有子级。 若要为整个 UI 启用布局舍入,请在根容器上将 设置为 。 有关示例,请参见 。 了解元素的测量和排列方式是了解布局的第一步。 有关可用 元素的详细信息,请参阅面板概述。 若要更好地了解可能影响布局的各种定位属性,请参阅对齐、边距和填充概述。 当你准备好将其全部放在一个轻量级应用程序中时,请参阅演练:我的第一个 WPF 桌面应用程序。 面板概述 对齐、边距和填充概述 布局和设计 小讯 2025年102协议与104协议区别(61850协议和104协议区别) 上一篇 2025-05-05 23:25 2025年m301h配置参数刷机(m301h怎么进入刷机模式) 下一篇 2025-06-07 22:28 相关推荐 2025年102协议与104协议区别(61850协议和104协议区别) 1744552630 2025年vue路由守卫的几种方法(vue路由守卫控制页面跳转) 1744552629 vue3生命周期钩子函数(vue3的生命周期函数) 1744552629 2025年noneart翻译(nonstop翻译) 1744552628 2025年聊天网站搭建(聊天网站怎么做) 1744552627 批处理删除文件夹命令(批处理文件删除文件夹) 1744552627 2025年流量回放工具有哪些(流量回放工具有哪些软件) 1744552626 测试驱动开发的含义(测试驱动开发的含义和作用) 1744552625 2025年笔记本连接交换机console口(笔记本连接交换机console口用什么软件) 1744552624 2025年m301h配置参数刷机(m301h怎么进入刷机模式) 1744552631 2025年程序卸载快捷键(程序的卸载) 1744552632 js数组方法中,哪些不能改变自身数组(js数组中哪些方法可以改变自身数组) 1744552632 反激电路工作原理是什么(反激电路的原理) 1744552632 启动docker 服务(启动docker服务的命令) 1744552633 群晖开启root权限(群晖transmission权限设置) 1744552634 2025年ad9910中文手册(ad9954中文手册) 1744552635 2025年产品经理难度(产品经理难吗) 1744552636 libjpeg编译(libzmq编译) 1744552637 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。如需转载请保留出处:https://51itzy.com/kjqy/145285.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/145285.html