Xaml 使用具有绝对布局的OnIdiom

Xaml 使用具有绝对布局的OnIdiom,xaml,xamarin,xamarin.forms,absolutelayout,Xaml,Xamarin,Xamarin.forms,Absolutelayout,我有圆形按钮,正在尝试使用AbsolutLayout根据它们是在手机还是平板电脑上更改它们的大小 这是我的xaml: <Frame BackgroundColor="{StaticResource ThemeColor}" Padding="0" CornerRadius="40" AbsoluteLayout.LayoutBounds="{StaticResource HomeCircle}" Absolut

我有圆形按钮,正在尝试使用
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>

编辑:尝试了矩形、绝对布局和框架的类型参数,它们都给出了以下错误:

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

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


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

在ViewModel中:

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需要矩形,而标记并不总是允许所有内容:)

为什么您的TypeArgument是“Frame”?@Jason,因为这些框架是实际的圆,具有作为按钮的点击手势识别器。我的TypeArgument应该是AbsoluteLayout吗?因为我试过了,它给了我同样的错误。您正在将此应用于框架的LayoutBounds属性,即类型Rectangle@Jason只是尝试更改它,给了我相同的错误:错误XFC0009未找到“Phone”的属性、BindableProperty或事件,或者值和属性之间的类型不匹配。在这一点上,我们尝试了矩形、框架和绝对布局的TypeArguments,它们都给出了这个错误。@Jason如果您参考了代码,就是这样。谢谢Andrea!当我尝试实现此功能时,帧的位置与我在“代码隐藏”中创建的矩形不匹配,当完成任何操作时,它会抛出一个错误:找不到键HomeCircle的StaticResource。知道为什么吗?没关系!只需输入我的ViewModel,而不是代码隐藏,谢谢您的帮助!是的,我也把它放在ViewModel中。答案不清楚,我会解决的