xaml - Xamarin 共享资源:全局样式和标记扩展
问题描述
在设置全局属性时,在应用程序(或页面)级别使用 aXAML Markup Extension
而不是标签是否有优势?Style
语境:
在“XAML Basics”文档中,他们给出了以下示例:
ORIGINAL
<Button Text="Do this!"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
BorderWidth="3"
Rotation="-15"
TextColor="Red"
FontSize="24" />
... OTHER SIMILAR BUTTONS ...
CLEAN
<ContentPage.Resources>
<ResourceDictionary>
<LayoutOptions x:Key="horzOptions"
Alignment="Center" />
<LayoutOptions x:Key="vertOptions"
Alignment="Center"
Expands="True" />
<x:Double x:Key="borderWidth">
3
</x:Double>
<x:Double x:Key="rotationAngle">-15</x:Double>
</ResourceDictionary>
</ContentPage.Resources>
<Button Text="Do this!"
HorizontalOptions="{StaticResource horzOptions}"
VerticalOptions="{StaticResource vertOptions}"
BorderWidth="{StaticResource borderWidth}"
Rotation="{StaticResource rotationAngle}"
TextColor="{StaticResource textColor}"
FontSize="{StaticResource fontSize}" />
在 Style 的文档中,他们给出了以下示例:
RESOURCE DICTIONARY CONTAINING BUTTON STYLE set in App.cs
<Application.Resources>
<ResourceDictionary>
<Style x:Key="buttonStyle" TargetType="Button">
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="VerticalOptions" Value="CenterAndExpand" />
<Setter Property="BorderColor" Value="Lime" />
<Setter Property="BorderRadius" Value="5" />
<Setter Property="BorderWidth" Value="5" />
<Setter Property="WidthRequest" Value="200" />
<Setter Property="TextColor" Value="Teal" />
</Style>
</ResourceDictionary>
</Application.Resources>
BUTTON WITH STYLE APPLIED IN A ContentPage
<Button Text="These buttons" Style="{StaticResource buttonStyle}" />
显然它们在句法上相似,但第二种方法不那么冗长,那么第一种方法的意义何在?
解决方案
显然,根据文档,它们是不同的定义。
XAML 标记扩展
XAML 标记扩展构成 XAML 中的一项重要功能,它允许将属性设置为从其他来源间接引用的对象或值。XAML 标记扩展对于共享对象和引用整个应用程序中使用的常量特别重要,但它们在数据绑定中发现了它们的最大效用。
Xamarin.Forms 中的全局样式
通过将样式添加到应用程序的资源字典中,可以使样式全局可用。这有助于避免跨页面或控件的样式重复。
您会看到XAML Markup Extensions的范围大于Global Styles,但是Global Styles只是Styles of Resource的一种特殊用途。
推荐阅读
- java - Different UTC offset for a date&time and its negative counterpart
- symfony - TYPO3 Symfony 表达式:用于数组 POST 的 isset()
- python - Python - 从命令行转储 Python 路径配置?
- python - 在python中打破一个try循环
- angular - 从 Ng-Idle 中删除 mousemove 等事件
- javascript - 获取请求 VS。WebSocket 哪个更快?
- macos - AVSynchronizedLayer 在 macOS 上不播放动画
- python - 将日期时间值列表转换为时间戳值列表
- java - 我怎么不能从 FTP 文件夹下载 .txt 文件,但可以列出文件并上传?
- python - 在 Python 中读取特定的 Excel 日历