将 OnIdiom 与 A​​bsoluteLayout 一起使用

Using OnIdiom with AbsoluteLayout

我有圆形按钮,我正在尝试根据它们是在 phone 上还是在使用 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,.375, 120, 120"/> 
    </ResourceDictionary> 
</AbsoluteLayout.Resources>

我查看了这个资源,但没有用:

编辑:已尝试使用 Rectangle、AbsoluteLayout 和 Frame 的 TypeArguments,但它们都出现此错误:

Error XFC0009 No property, BindableProperty, or event found for "Phone", or mismatching type between value and property.

编辑:也查看了这个线程,它提供了相同的错误:

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

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

在视图模型中:

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, 0.5f, 120, 120);

在 yaml 中:

<AbsoluteLayout>
   <Frame BackgroundColor="Gray"
      Padding="0"
      CornerRadius="40"
      AbsoluteLayout.LayoutBounds="{Binding HomeCircle}"
      AbsoluteLayout.LayoutFlags="PositionProportional">
      <Label Text="TEST"
         HorizontalOptions="Center"
         VerticalOptions="Center"
         TextColor="Black"/>
         <Frame.GestureRecognizers>
            <TapGestureRecognizer Command="{Binding DoSomething}"/>
         </Frame.GestureRecognizers>
      </Frame>
   </AbsoluteLayout>

无论如何 AbsoluteLayout.LayoutBounds 需要矩形,标记并不总是允许所有内容:)