如何从XAML访问'this'类实例视图或布局的宽度和高度? (Xamarin.forms)

时间:2016-06-26 20:40:04

标签: xamarin xamarin.forms

我正在使用Xamarin.forms创建应用程序。

我想从XAML访问此宽度。

在此示例中,如何设置Label的fontsize取决于AbsoluteLayout的宽度? 我知道使用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>

2 个答案:

答案 0 :(得分:2)

您可以通过纯XAML访问属性,但首先需要为元素x:Name。然后,您可以使用View-to-View绑定来访问只读Width值。它看起来像这样:

<?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值。

答案 1 :(得分:1)

您可以使用SizeChanged事件来侦听尺寸更改。每个View都有一个WidthHeight属性,该属性是在触发该事件后设置的。