【MAUI】FlexLayout

news2024/12/27 8:00:59

文章目录

  • 概述
  • 属性
    • 方向和对齐方式
      • Direction
      • Wrap
      • JustifyContent
      • AlignItems
      • AlignContent
  • 圣杯布局
  • 来源

概述

FlexLayout弹性布局,和前端的Flex弹性布局,几乎一样。FlexLayout是容器,可以定义Direction/主轴方向、Wrap/子元素在主轴方向上是否换行/列、JustityContent/AlignItems/AlignContent子元素整体对齐方式。同时,在子元素上可以通过附加属性,定义子元素的个体行为,如Order,定义子元素排列顺序;Basis/Grow/Shrink,定义子元素主轴方向的尺寸形为;AlighSeft,定义子元素在交叉轴方向的对齐行为。
在这里插入图片描述
使用FlexLayout布局时的经验

  • 确定子元素排列的主轴方向Direction,Row-由左至右水平排列(默认值),Column-由上至下垂直排列,或者RowReverse-由右至左水平排列、ColumnReverse-由下至上垂直排列
  • 确定子元素在主轴方向上是否换行Wrap,NoWrap-不换行(默认值)、Wrap-换行、Reverse-反方向换行
  • 确定子元素整体在主轴和交叉轴上的对齐方式,JustifyContent-主轴方向上的对齐方式、AlignItems-NoWap时交叉轴方向上的对齐方式、AlignContent-Wap时交叉轴方向上的对齐方式
  • 确定子元素个体在主轴和交叉轴上的排列顺序、缩放和对齐行为,Order-排列顺序、Basis/Grow/Shrink-NoWap时主轴方向上的尺寸和缩放、AlignSeft-NoWap时交叉轴方向上的对齐

在这里插入图片描述

属性

  • AlignContent,类型为 FlexAlignContent,确定布局引擎如何在多行上布局的子元素之间和周围分配空间。此属性的默认值为 Stretch。
  • AlignItems,类型为 FlexAlignItems,指示布局引擎如何沿交叉轴在子级之间和周围分配空间。 此属性的默认值为Stretch。
  • Direction,类型为 FlexDirection,定义子级的方向和主轴。 此属性的默认值为 Row。
  • JustifyContent,类型为 FlexJustify,指定如何沿主轴在子级之间和周围分布空间。 此属性的默认值为 Start。
  • Position,类型为 FlexPosition,确定子级的位置是相对的,还是使用固定值。 此属性的默认值为 Relative。
  • Wrap,类型为 FlexWrap,用于控制子级是在单行还是多行中布局。 此属性的默认值为 NoWrap。
  • AlignSelf,类型为 FlexAlignSelf,是附加属性,指示布局引擎如何沿交叉轴在特定子级之间和周围分配空间。此属性的默认值为 Auto。
  • Basis,类型为 FlexBasis,是附加属性,用于定义在根据其他属性值分配可用空间之前子级的初始主大小。 此属性的默认值为Auto。
  • Grow,类型为 float,是附加属性,用于指定子级应在主轴上使用的可用空间量。 此属性的默认值为 0.0。验证回调可确保设置属性时,其值大于或等于 0。
  • Order,类型为 int,是附加属性,用于确定子级是在容器中的其他子级之前还是之后布局。 此属性的默认值为 0。
  • Shrink,类型为 float,是附加属性,用于控制子级应如何收缩才能使所有子级都可以放入容器内。 此属性的默认值为1.0。验证回调可确保设置属性时,其值大于或等于 0。

所有这些属性都由 BindableProperty 对象提供支持,这意味着这些属性可以作为数据绑定的目标并设置样式。

当 FlexLayout 中的项以列排列时,FlexLayout 具有垂直主轴和水平交叉轴。 当 FlexLayout 的项以行排列时,FlexLayout 具有水平主轴和垂直交叉轴。

方向和对齐方式

可以在 FlexLayout 上设置 Direction、Wrap、JustifyContent、AlignItems、AlignContent 和 Position 可绑定属性,以控制所有子级的方向和对齐方式。

Direction

Direction 属性,类型为 FlexDirection,定义子级的方向和主轴。 FlexDirection 枚举定义下列成员:

  • Column,指示子元素应垂直堆叠。
  • ColumnReverse (或 XAML 中的“列反向”),指示子元素应按反向顺序垂直堆叠。
  • Row,指示子元素应水平堆叠。 这是 Direction 属性的默认值。
  • RowReverse (或 XAML 中的“row-reverse”),指示子元素应按反向顺序水平堆叠。

当 Direction 属性设置为 Column 或 ColumnReverse 时,主轴将为 y 轴,且项将垂直堆叠。 当 Direction 属性设置为 Row 或 RowReverse 时,主轴将为 x 轴,且子元素将水平堆叠。

在 XAML 中,可以使用小写、大写或混合大小写的枚举成员名称来指定此属性的值,也可以使用括号中显示的两个附加字符串。

Wrap

Wrap 属性,类型为 FlexWrap,控制子元素是在单行还是多行中布局。 FlexWrap 枚举定义下列成员:

  • NoWrap,指示子级在单行中布局。 这是 Wrap 属性的默认值。
  • Wrap,指示项在多行中布局(如果需要)。
  • Reverse(或 XAML 中的“wrap-reverse”),指示项按相反顺序以多行形式布局(如果需要)。
  • 如果属性 Wrap 设置为 NoWrap 且主轴受限,而主轴不够宽或高,不足以容纳所有子项时,FlexLayout 会尝试将项变小。
    可以使用 Shrink 附加的可绑定属性控制子级的收缩因子。

当 Wrap 属性设置为 Wrap 或 WrapReverse 时,可使用 AlignContent 属性指定行的分布方式。

JustifyContent

JustifyContent 属性,类型为 FlexJustify,指定如何沿主轴在子级之间和周围分配空间。 FlexJustify 枚举定义下列成员:

  • Start(或 XAML 中的“flex-start”),指示子级应在开头对齐。 这是 JustifyContent 属性的默认值。
  • Center,指示子级应围绕中心对齐。
  • End(或 XAML 中的“flex-end”),指示子级应在末尾对齐。
  • SpaceBetween(或 XAML 中的“space-between”),指示子级应均匀分布,第一个子级在开头,最后一个子级在末尾。
  • SpaceAround(或 XAML 中的“space-around”),指示子级应均匀分布,第一个和最后一个子级具有半空间。
  • SpaceEvenly,指示子级应均匀分布,所有子级周围都有同等的空间。

AlignItems

AlignItems 属性,类型为 FlexAlignItems,指示布局引擎如何沿交叉轴在子级之间和周围分配空间。 FlexAlignItems 枚举定义下列成员:

  • Stretch,指示子级应伸展。这是 AlignItems 属性的默认值。
  • Center,指示子级应围绕中心对齐。
  • Start(或 XAML 中的“flex-start”),指示子级应在开头对齐。
  • End(或 XAML 中的“flex-end”),指示子级应在末尾对齐。

这是指示子级如何在交叉轴上对齐的两个属性中的一个。 在每行中,子级在每个项的开始、居中或末尾拉伸或对齐。

对于任何单个子级,可以使用 AlignSelf 附加的可绑定属性重写 AlignItems 设置。

AlignContent

AlignContent 属性,类型为 FlexAlignContent,确定布局引擎如何在多行布局的子元素之间和周围分配空间。 FlexAlignContent 枚举定义下列成员:

  • Stretch,指示应拉伸子级。这是 AlignContent 属性的默认值。
  • Center,指示子级应围绕中心对齐。
  • Start(或 XAML 中的“flex-start”),指示子级应在开头对齐。
  • End(或 XAML 中的“flex-end”),指示子级应在末尾对齐。
  • SpaceBetween(或 XAML 中的“space-between”),指示子级应均匀分布,第一个子级在开头,最后一个子级在末尾。
  • SpaceAround(或 XAML 中的“space-around”),指示子级应均匀分布,第一个和最后一个子级具有半空间。
  • SpaceEvenly,指示子级应均匀分布,所有子级周围都有同等的空间。
    当只有一行或一列时,AlignContent 属性不起作用。

圣杯布局

网页设计中有一种标准布局,称为“圣杯”,因为这是一种非常理想的布局格式,但通常很难完美地实现。 布局由页面顶部的页眉和底部的页脚组成,页眉和页脚都会延伸到页面的整个宽度。 占据页面中心的是主要内容,但通常在内容的左侧有一个柱状菜单,右侧有补充信息(有时称为“端”区域)。 这种布局可以用 FlexLayout 来实现。

下面的示例使用嵌套在另一个中的 FlexLayout 显示此布局的实现:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="FlexLayoutDemos.Views.HolyGrailLayoutPage"
             Title="Holy Grail Layout">

    <FlexLayout Direction="Column">

        <!-- Header -->
        <Label Text="HEADER"
               FontSize="18"
               BackgroundColor="Aqua"
               HorizontalTextAlignment="Center" />

        <!-- Body -->
        <FlexLayout FlexLayout.Grow="1">

            <!-- Content -->
            <Label Text="CONTENT"
                   FontSize="18"
                   BackgroundColor="Gray"
                   HorizontalTextAlignment="Center"
                   VerticalTextAlignment="Center"
                   FlexLayout.Grow="1" />

            <!-- Navigation items-->
            <BoxView FlexLayout.Basis="50"
                     FlexLayout.Order="-1"
                     Color="Blue" />

            <!-- Aside items -->
            <BoxView FlexLayout.Basis="50"
                     Color="Green" />

        </FlexLayout>

        <!-- Footer -->
        <Label Text="FOOTER"
               FontSize="18"
               BackgroundColor="Pink"
               HorizontalTextAlignment="Center" />
    </FlexLayout>
</ContentPage>

“导航”和“端”区域在左侧和右侧以 BoxView 呈现。 第一个 FlexLayout 具有垂直主轴,并包含排列在一列中的三个子级。 它们是页眉、正文和页脚。 嵌套的 FlexLayout 有一个水平主轴,并包含排列在一行中的三个子级。

在这里插入图片描述
在此示例中,Order 属性在第一个 BoxView 上设置为小于其同级的值,以使其显示为行中的第一项。 Basis 属性设置在两个 BoxView 对象上,使它们的宽度为 50 个与设备无关的单位。 Grow 属性在嵌套的 FlexLayout 上设置,以指示此 FlexLayout 应占用外部 FlexLayout 内所有未使用的垂直空间。 此外,Grow 属性在表示内容的 Label 上设置,以指示此内容将占用嵌套的 FlexLayout 中所有未使用的水平空间。

还存在一个 Shrink 属性,当子项的大小超过 FlexLayout 的大小,但不需要换行时,可以使用该属性。

来源

FlexLayout
MAUI新生6.2-布局类控件难点:FlexLayout、BindableLayout、StateContainer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2158349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue使用Vue Router路由:开发单页应用

1、路由基础 在单页 Web 应用中&#xff0c;整个项目只有一个 HTML 文件&#xff0c;不同视图&#xff08;组件的模块&#xff09;的内容都是在同一个页面中渲染的。当用户切换页面时&#xff0c;页面之前的跳转都是在浏览器端完成的&#xff0c;这时就需要使用前端路由。 路…

蒙古语有方言差异吗?

蒙古语存在方言差异&#xff0c;主要分为西部方言和东部方言两大类。西部方言&#xff0c;即蒙古方言或喀尔喀方言&#xff0c;主要在蒙古国使用&#xff0c;是该国的官方语言。东部方言&#xff0c;又称布里亚特方言或巴尔虎-布里亚特方言&#xff0c;主要在中国内蒙古自治区和…

deepin桌面版连接windows远程桌面

在Linux系统中&#xff0c;要登录到Windows系统&#xff0c;通常可以使用远程桌面协议(RDP)。你需要在Linux系统上安装RDP客户端。 使用如下命令安装rdp协议&#xff1a; sudo apt-get install xrdp 安装成功后&#xff0c;启动rdp服务。 sudo systemctl start xrdp 有了r…

vscode缩进 和自动格式化

如下图&#xff0c;缩进太大了。 检查2个地方 prettierrc.cjs文件。此处决定缩进几个tab vscode 的设置。 保存的时候 格式化。

Apache Druid命令执行(CVE-2021-25646)

漏洞详情&#xff1a; Apache Druid 是用Java编写的面向列的开源分布式数据存储系统&#xff0c;旨在快速获取大量事件数据&#xff0c;并在数据之上提供低延迟查询。 Apache Druid含有能够执行嵌入在各种类型请求中由用户提供的JavaScript代码功能。此功能适用于高度信任环境…

Java_Day04学习

类继承实例 package com.dx.test03; public class extendsTest {public static void main(String args[]) {// 实例化一个Cat对象&#xff0c;设置属性name和age&#xff0c;调用voice()和eat()方法&#xff0c;再打印出名字和年龄信息/********* begin *********/Cat cat ne…

李飞飞创业公司World Labs:引领AI新方向的“大世界模型”

引言 随着人工智能的不断进步&#xff0c;AI领域涌现了许多新兴技术和研究方向。在这其中&#xff0c;李飞飞创办的World Labs凭借其独特的“空间智能”和“大世界模型”&#xff08;Large World Model, LWM&#xff09;理念&#xff0c;迅速成为焦点。尤其是在获得了2.3亿美元…

python 斑马打印模板

打印代码逻辑如下&#xff1b; 包括样式、表格 import win32printdef print_zpl_from_usb_printer(printer_name, zpl_content):# 打开打印机hPrinter win32print.OpenPrinter(printer_name)if hPrinter is None:print(f"Failed to open printer: {printer_name}")…

淘宝商品评论数据获取API接口响应参数列表展示(可测key)

item_review-获得淘宝商品评论 在电商领域&#xff0c;商品评论数据是商家和消费者都极为关注的重要信息。通过这些数据&#xff0c;商家可以了解产品的市场反馈&#xff0c;优化产品和服务&#xff1b;而消费者则可以参考其他用户的评价&#xff0c;做出更明智的购买决策。然…

Vulkan 学习(9)---- vkSuraceKHR 创建

目录 OverView创建窗口表面参考代码 OverView Vulkan 是一个平台无关的图形API&#xff0c;这意味着它不能直接与特定的窗口系统(Windows&#xff0c;linux 和 macOS 的窗口系统)进行交互 为了解决这个问题&#xff0c;Vulkan 引入了窗口系统集成(Window System Intergration …

Flutter为Android添加签名并打包

前言 我们需要将App进行数字签名才能发布到商店里。在这里就具体描述一下如果给App添加签名 为App签名 创建一个用户上传的秘钥库 如果你已经有一个秘钥库了&#xff0c;可以直接跳到下一步&#xff0c;如果没有则按照下面的指令创建一个 keytool 可能不在我们的系统路径中…

Vxe UI vue vxe-table 实现自适应列宽,根据内容自适应列的宽度

Vxe UI vue vxe-table 实现自适应列宽&#xff0c;根据内容自适应列的宽度 之前老版本是通过计算字符数量&#xff0c;然后给动态给每一列设置宽度&#xff0c;不仅麻烦&#xff0c;还不好复用。 看了 API 发现 v4.7 和 v3.9 版本已经直接就能支持了&#xff0c;只需加上 widt…

英飞凌TC3xx -- Bootstrap Loader分析

目录 1.Bootstrap Loaders作用 2.CAN BSL详解 2.1 CAN BSL的时钟系统 2.2 CAN BSL流程 3.小结 英飞凌TC3xx的Platform Firmware章节里&#xff0c;提供了多种启动模式&#xff1a; Internal start from Flash&#xff1a;b111Alternate Boot Mode&#xff1a;b110Generic …

宠物鱼油补充剂行业调研:未来几年年复合增长率CAGR为7.8%

宠物鱼油补充剂是一种营养补充剂&#xff0c;富含从鱼类中提取的欧米伽-3 脂肪酸&#xff08;主要是 EPA 和 DHA&#xff09;&#xff0c;专为宠物设计&#xff0c;以改善其健康状况。鱼油补充剂富含奥米加-3 脂肪酸&#xff0c;已被证明对宠物健康有诸多益处&#xff0c;包括改…

ER论文阅读-Incomplete Multimodality-Diffused Emotion Recognition

基本介绍&#xff1a;NeurIPS, 2024, CCF-A 原文链接&#xff1a;https://proceedings.neurips.cc/paper_files/paper/2023/file/372cb7805eaccb2b7eed641271a30eec-Paper-Conference.pdf Abstract 人类多模态情感识别&#xff08;MER&#xff09;旨在通过多种异质模态&#x…

开源模型应用落地-Qwen2.5-Coder模型小试-码无止境(一)

一、前言 代码专家模型是一种基于人工智能的先进技术&#xff0c;旨在自动分析和理解大量代码库&#xff0c;并从中学习常见的编码模式和最佳实践。这种模型通过深度学习和自然语言处理&#xff0c;能够提供准确而高效的代码建议&#xff0c;帮助开发人员在编写代码时有效地避免…

freemobus阅读笔记

以下&#xff0c;仅仅在freemodbus中有效 pvMBFrameStart中的pv是什么的缩写 p代表指针&#xff0c;V母鸡&#xff0c;MBFrameStart指的是modbus系统的开始 pusLength 中的pus p代表指针&#xff0c;u代表无符号 s代表short短整型 pucFrame 中的puc p代表指针&#xff0c…

Linux学习笔记13---GPIO 中断实验

中断系统是一个处理器重要的组成部分&#xff0c;中断系统极大的提高了 CPU 的执行效率&#xff0c;本章会将 I.MX6U 的一个 IO 作为输入中断&#xff0c;借此来讲解如何对 I.MX6U 的中断系统进行编程。 GIC 控制器简介 1、GIC 控制器总览 I.MX6U(Cortex-A)的中断控制器…

测试文件和数据库文件

接口测试 flaks项目入口文件manage.py路由配置 import requests#首先面向对象作封装&#xff0c;避免相同代码反复编写 class HttpApiTest:def test_get(self,url,data{}): #用来测试get方法的接口 #self通过共享self类中间的变量 #url用来请求接口 #data可传可不传res reques…

明日周刊-第21期

断更了一段时间&#xff0c;现在开始续上。本周的最大的杭州科技活动应该就是云栖大会了&#xff0c;一年一度的云栖大会也不知不觉经过了十年&#xff0c;趁着周六我也去好好体验了一番。&#xff08;ps&#xff1a;下周炉石传说重回国服了&#xff0c;各位都准备好了吗&#…