Avalonia目前不具备相对单位功能,要使用相对单位需要安装RelativeControl.Avalonia包

RelativeControl.Avalonia

开始使用

添加NuGet包:

dotnet add package RelativeControl.Avalonia

设置值为 double 属性的相对值:

<CONTROL r:Relative.Width="20pw"/>

这会设定此Control的宽为20%逻辑父控件宽度。

你还可以对相对长度进行加减:

<CONTROL r:Relative.Width="20pw+10ph"/>

这会设定此Control的宽为20%逻辑父控件宽度+10%逻辑父控件高度。

在code behind中,除了加减,还可以对相对单位进行乘除运算。

  • Multiply()和Divide()会改变其自身的倍率,同时影响所有对它的引用。
  • * 和 / 运算会生成一个轻量级副本,不会影响原实例。

Relative.SetOneTimeWidthRelative.SetOneTimeHeight 仅在控件附加到视觉树时更新一次。

其它使用RelativeLength/RelativeLengthMerge的属性:

  • Relative.Height
  • Relative.MinWidth
  • Relative.MinHeight
  • Relative.MaxWidth
  • Relative.MaxHeight
  • Relative.SetOneTimeWidth
  • Relative.SetOneTimeHeight

设定值为 CornerRadius 属性的相对值:

<CONTROL r:Relative.CornerRadius="10sw 10sw+5sh 10sh-5sw 10sh"/>

这会设定此Control的圆角为

TopLeft = 10% 自身宽度,

TopRight = 10% 自身宽度 + 5% 自身高度,

BottomRight = 10% 自身高度 - 5% 自身宽度,

BottomLeft = 10% 自身高度

设定值为 Thickness 属性的相对值

<CONTROL r:Relative.BorderThickness="1em 2em-5px"/>

这会设定此Control的值为:

Horizontal(Left,Right) = 1倍字宽,

Vertical(Top,Bottom) = 2倍字宽 - 5像素

其它使用RelativeThickness的属性:

  • Relative.Margin
  • Relative.Padding

为任意属性绑定相对值

<CONTROL PROPERTY="{r:RelativeBinding {Binding SOURCE_PROPERTY},50%}"/>

这会设定此Property的值为SOURCE_PROPERTY值的50%.

一个合法的 SourceProperty的值必须为以下类型:

  • double
  • 任意可转换为double的类型(如数字字符串)
  • 任意继承了IMulDiv<RelativeScale>IMulDiv<double>的自定义结构或类.

RelativeBindOneTime只在控件附加到视觉树时更新一次。

在自定义属性中使用相对单位:

StyledProperty:

public static readonly StyledProperty<IRelative<T>> XXXProperty =
AvaloniaProperty.Register<..., IRelative<T>>(nameof(XXX));

DirectProperty:

public static readonly DirectProperty<..., IRelative<T>> XXXProperty =
AvaloniaProperty.RegisterDirect<..., IRelative<T>>(...);

AttachedProperty:

public static readonly AttachedProperty<IRelative<T>> XXXProperty =
AvaloniaProperty.RegisterAttached<...,...,IRelative<T>>(...);

所有单位

绝对单位:

px: 设备无关像素(1/96英寸)
cm: 厘米
mm: 毫米
in: 英寸

相对单位:

      tpw: 模板父控件宽度
tph: 模板父控件高度
lpw or pw: 逻辑父控件宽度
lph or ph: 逻辑父控件高度
vpw: 视觉父控件宽度
vph: 视觉父控件高度
sw: 自身宽度
sh: 自身高度
em: 字宽
vw: 窗口宽度
vh: 窗口高度
%: 百分比,仅用于RelativeBinding和RelativeBindOneTime

API最小可用版本

0.0.5

  • Width
  • Height
  • MinWidth
  • MinHeight
  • MaxWidth
  • MaxHeight
  • BorderThickness
  • CornerRadius

0.1.0

  • Margin
  • Padding

1.0.0-alpha

  • RelativeBinding

支持相对属性绑定 如何绑定自定义属性?

1.0.0-beta

  • SetOneTimeWidth
  • SetOneTimeHeight
  • RelativeBindOneTime

这些属性仅会在自身控件附加到视觉树时更新一次

在Avalonia中使用相对单位的更多相关文章

  1. CSS3中的rem单位

    一.rem介绍 rem是什么? 它的全称是 font size of the root element (根元素的字体大小) 它是CSS3中新增加的一个尺寸(度量)单位,根节点(html)的font- ...

  2. [安卓基础] 008.Android中的显示单位

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  3. css中的各种单位简述以及ios10下safari禁止缩放的问题

    px:绝对单位,页面按精确像素展示 em:相对单位,基准点为父节点字体的大小,如果自身定义了font-size按自身来计算(浏览器默认字体是16px),整个页面内1em不是一个固定的值. rem:相对 ...

  4. Android中的各种单位

    px(像素):屏幕上的点.in(英寸):长度单位.mm(毫米):长度单位.pt(磅):1/72英寸.dp(与密度无关的像素):一种基于屏幕密度的抽象单位.在每英寸160点的显示器上,1dp = 1px ...

  5. android中的屏幕单位介绍

    1.px (pixels)(像素):是屏幕的物理像素点,与密度相关,密度大了,单位面积上的px 会比较多.通常不推荐使用这个. 2.dip 或dp(与密度无关的像素):一个基于density(密度)的 ...

  6. 关于webapp中的文字单位的一些捣腾

    前言 文字是网页内容的一枚大将,我们无时无刻都在看着它,只要是你盯屏幕上的任何一个地方都会有文字.地铁上无时无刻都在盯着屏幕上的人对于文字更为敏感,太大不行,太小TN又看不清上面到底在说什么,有时候车 ...

  7. CSS中的尺寸单位

    绝对单位 px: Pixel 像素 pt: Points 磅 pc: Picas 派卡 in: Inches 英寸 mm: Millimeter 毫米 cm: Centimeter 厘米 q: Qua ...

  8. NEST 中的时间单位

    Time units 英文原文地址:Time units 与 Elasticsearch 交互,我们会遇到需要设定时间段的情况(例如:timeout 参数).为了指定时间段,我们可以使用一个表示时间的 ...

  9. 物理引擎中velocity的单位是个什么鬼?

    现在, 你可能对于什么是velocity的单位感到奇怪.他是单位秒中经过点的一个可测量的量(pt/s).如果你想要在iphone横屏从左往右的移动物体,并且你想在1秒内移动1024个点,那么物体的x速 ...

  10. [css 实践篇]CSS中的尺寸单位

    绝对单位 px: Pixel 像素 pt: Points 磅 pc: Picas 派卡 in: Inches 英寸 mm: Millimeter 毫米 cm: Centimeter 厘米 q: Qua ...

随机推荐

  1. 微信小程序反编译~2022年

    小程序反编译 前言 微信小程序反编译可以通过对小程序包进行反编来获取小程序源码,在一次信息收集的过程中对某公司的APP.微信公众号.小程序进行抓包数据分析寻找接口等有用的信息时,在抓包过程中由于微信的 ...

  2. mac、windows 配置python国内镜像源

    前言 我们在使用python pip安装第三方库时,经常会发生超时报错,这是可以指定临近的镜像源快速更新. mac中 在用户目录下建立一个".pip"目录,到目录里新建一个文件&q ...

  3. 一个属性同时使用Autowired和Resource注解会发生什么?

    首发于公众号:BiggerBoy 右侧图片wx扫码关注有惊喜 欢迎关注,查看更多技术文章 如题,如果在同一个属性上使用@Autowired注解注入bean1,然后使用@Resource注解注入bean ...

  4. windows 本地部署DeepSeek

    一:前言: 那么为什么要本地部署,主要就是企业或者个人为了数据安全和防止受限网络等其 数据安全:数据不用上传到外面,在本地处理,不用担心数据泄露,像金融.医疗这些对数据安全要求高的行业特别需要. 功能 ...

  5. deepseek+dify工作流实现代码审计

    一.登录dify,设置deepseek apikey 登录dify(https://cloud.dify.ai/signin) 设置deepseek apikey 二.创建dify工作流 添加工作流应 ...

  6. 如果在安装32位Oracle客户端组件的情况下64位模式运行, 将出现此问题.

    场景重现 在一台Windows 7 32-bit电脑上 安装了Oracle 11gR2 32-bit的客户端 用 VS2010 写的一个基于数据库驱动的项目 操作Oracle数据库都挺正常的 后来.. ...

  7. SearXNG私有化部署与Dify集成

    一.概述 SearXNG 是一个免费的互联网元搜索引擎,它聚合了来自各种搜索服务和数据库的结果,但摆脱了隐私追踪 -- 用户行为既不会被引擎跟踪也不会被分析. 功能特性 自托管,可以私有化部署 没有用 ...

  8. unity手机花屏

    关于Camera组件中Clear Flags的理解 - 知乎 (zhihu.com) https://blog.csdn.net/yanchezuo/article/details/77337755 ...

  9. Lua 的os.date()

    Lua os.date() os.date## 原型:os.date ([format [, time]]) 解释:返回一个按format格式化日期.时间的字串或表. usage## 参数格式: 由原 ...

  10. 科研新体验:刘同学深度试用ADTF软件反馈揭晓!

    一.前言 作为一名高校的科研工作者,在高校的科研工作中,经常需要处理各种复杂的数据流,尤其是视频采集和处理的工作,对数据的实时性和精度要求非常高,我首次试用ADTF时,主要负责开发一个集成FFmpeg ...