特定平台的XAML
OnPlatform 标记扩展
概述
Avalonia中的OnPlatform标记扩展(Markup Extension)允许开发人员根据应用程序运行的操作系统指定属性的不同值。这对于创建需要根据平台调整其 UI 或行为的跨平台应用程序特别有用。
标记扩展语法的基本用法
您可以在标记扩展语法中为每个平台指定值,并为未找到特定平台匹配的情况指定默认值:
<TextBlock Text="{OnPlatform Default='Unknown', Windows='Im Windows', macOS='Im macOS', Linux='Im Linux'}"/>
或者,您可以使用构造函数语法直接定义默认值,跳过 Default 关键字。但是平台特定的属性仍需定义:
<TextBlock Text="{OnPlatform 'Hello World', Android='Im Android'}"/>
您可以将此标记扩展搭配任何其他类型使用,而不仅仅是字符串:
<Border Height="{OnPlatform 10, Windows=50.5}"/>
指定类型参数
您可以使用自定义的TypeArguments 显式指定值的类型:
<TextBlock Tag="{OnPlatform '0, 0, 0, 0', Windows='10, 10, 10, 10', x:TypeArguments=Thickness}"/>
在上面的示例中,Tag 属性的类型为 object,因此编译器没有足够的信息来解析输入字符串。如果不指定 TypeArguments,属性在所有平台上都将具有 string 类型。但由于我们有 TypeArguments,编译器将解析它们为 Thickness 值。
嵌套标记扩展
OnPlatform 扩展支持在其内部嵌套其他标记扩展:
<Border Background="{OnPlatform Default={StaticResource DefaultBrush}, Windows={StaticResource WindowsBrush}}"/>