将 OnIdiom 与 AbsoluteLayout 一起使用
Using OnIdiom with AbsoluteLayout
我有圆形按钮,我正在尝试根据它们是在 phone 上还是在使用 AbsolutLayout
的平板电脑上更改它们的大小。
这是我的 xaml:
<Frame BackgroundColor="{StaticResource ThemeColor}" Padding="0" CornerRadius="40" AbsoluteLayout.LayoutBounds="{StaticResource HomeCircle}" AbsoluteLayout.LayoutFlags="PositionProportional">
<Label Text="" 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 需要矩形,标记并不总是允许所有内容:)
我有圆形按钮,我正在尝试根据它们是在 phone 上还是在使用 AbsolutLayout
的平板电脑上更改它们的大小。
这是我的 xaml:
<Frame BackgroundColor="{StaticResource ThemeColor}" Padding="0" CornerRadius="40" AbsoluteLayout.LayoutBounds="{StaticResource HomeCircle}" AbsoluteLayout.LayoutFlags="PositionProportional">
<Label Text="" 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 需要矩形,标记并不总是允许所有内容:)