使用 OnIdiom 和 AbsoluteLayout

问题描述

我有圆形按钮,正在尝试使用 AbsolutLayout 更改它们的大小,具体取决于它们是在手机上还是平板电脑上。

这是我的 xaml:

<Frame BackgroundColor="{StaticResource ThemeColor}" Padding="0" CornerRadius="40" AbsoluteLayout.LayoutBounds="{StaticResource HomeCircle}" AbsoluteLayout.LayoutFlags="PositionProportional"> 
    <Label Text="&#xf5a0;" HorizontalOptions="Center" VerticalOptions="Center" Style="{StaticResource Icon}" TextColor="{StaticResource LabelColor}"/> 
    <Frame.GestureRecognizers> 
        <TapGestureRecognizer Tapped="Directions"/> 
    </Frame.GestureRecognizers> 
</Frame> 

<AbsoluteLayout.Resources> 
    <ResourceDictionary> 
        <OnIdiom x:Key="HomeCircle" x:TypeArguments="Frame" Phone=".85,.375,80,80"
                                                            Tablet=".85,120,120"/> 
    </ResourceDictionary> 
</AbsoluteLayout.Resources>

我查看了此资源,但它不起作用:

How to use attached properties such as Grid.Row,AbsoluteLayout.LayoutFlags to OnPlatform tag in Xamarin Forms

编辑:尝试了 Rectangle、AbsoluteLayout 和 Frame 的 TypeArguments,它们都给出了这个错误

错误 XFC0009 找不到“电话”的属性、BindableProperty 或事件,或者值和属性间的类型不匹配。

编辑:也看过这个帖子,它提供了同样的错误

https://xamarin.github.io/bugzilla-archives/55/55183/bug.html

解决方法

我过去也遇到过同样的问题。我的解决方案是通过 Binding 代替 StaticResource 来设置 AbsoluteLayout 边界。

在视图模型中:

foo({ first: "hi",second: "man" },"somethingElse")

在 yaml 中:

public Xamarin.Forms.Rectangle HomeCircle => Xamarin.Forms.Device.Idiom == TargetIdiom.Phone ? new Xamarin.Forms.Rectangle(0.5f,0.5f,80,80) : new Xamarin.Forms.Rectangle(0.5f,120,120);

反正 AbsoluteLayout.LayoutBounds 需要 Rectangle,而标记并不总是允许一切:)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...