我正在使用Xamarin.forms制作应用程序。
我想从XAML中访问这个宽度。
在这个例子中,如何设置标签的字体大小取决于绝对布局的宽度?我知道使用ValueConverter,但不知道如何访问AbsoluteLayout的宽度。
谢谢。
<?xml version="1.0" encoding="UTF-8"?>
<AbsoluteLayout xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="xxx">
<Label AbsoluteLayout.LayoutBounds="0.5, 0.5, 1, 1" AbsoluteLayout.LayoutFlags="All" Text="SOME TEXT" VerticalTextAlignment="Center" HorizontalTextAlignment="Center"/>
</AbsoluteLayout>
可以通过纯XAML访问这些属性,但是首先需要为元素指定一个x:Name
。然后,您可以使用View-to-View绑定来访问只读宽度值。它看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<AbsoluteLayout xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:conv="NameSpace.With.My.Converter"
x:Class="xxx"
x:Name="Container">
<AbsoluteLayout.Resources>
<conv:MyConverterClass x:Key="MyConverter">
</AbsoluteLayout.Resources>
<Label AbsoluteLayout.LayoutBounds="0.5, 0.5, 1, 1"
AbsoluteLayout.LayoutFlags="All"
Text="SOME TEXT"
FontSize="{Binding Source={x:Reference Container}, Path=Width, Mode=OneWay, Converter={StaticResource MyConverter}}"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"/>
</AbsoluteLayout>
这个例子希望你定义一个值转换器(上面命名为NameSpace.With.My.Converter.MyConverterClass
),它可以接受一个双精度值,并从中计算一个合适的FontSize值。
您可以使用SizeChanged
事件侦听大小变化。每个View
都有一个Width
和Height
属性,该属性是在该事件触发后设置的。