Xamarin.forms 根据设备大小调整框架和控件的大小。建议?

Xamarin.forms 根据设备大小调整框架和控件的大小。建议?,xamarin.forms,Xamarin.forms,我有一个框架,有两个按钮和标签。 确保框架和控件位于内部的最佳做法是什么 根据屏幕大小调整大小 无论我尝试了什么,似乎都做不到!!! 我认为flexlayout可以开箱即用,但无法使其工作 我使用了绝对布局来调整框架的大小 有什么建议吗 <AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="Lavender"> <Frame

我有一个框架,有两个按钮和标签。 确保框架和控件位于内部的最佳做法是什么 根据屏幕大小调整大小

无论我尝试了什么,似乎都做不到!!! 我认为flexlayout可以开箱即用,但无法使其工作

我使用了绝对布局来调整框架的大小

有什么建议吗

 <AbsoluteLayout  HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="Lavender">
    <Frame Margin="20" 
               AbsoluteLayout.LayoutBounds="0.5,.05,0.9,0.4" AbsoluteLayout.LayoutFlags="All"  
               HorizontalOptions="FillAndExpand" 
               VerticalOptions="FillAndExpand" 
               BackgroundColor="WhiteSmoke" 
               BorderColor="DarkGray" 
               CornerRadius="10">
        <FlexLayout
            Padding="0"
            AlignContent="Center"
            AlignItems="Center"
            Direction="Column"
            JustifyContent="Center"
            Wrap="NoWrap">
            <Label Text="Label1" FontAttributes="Bold"  FlexLayout.AlignSelf="Center" />
            <Grid FlexLayout.AlignSelf="Center" ColumnSpacing="30">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"></RowDefinition>
                    <RowDefinition Height="Auto"></RowDefinition>
                    <RowDefinition Height="Auto"></RowDefinition>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Button Grid.Row="0" 
                        Grid.Column="0"
                            Text="A" 
                            MinimumHeightRequest="50" 
                            MinimumWidthRequest="50" 
                            HeightRequest="50" 
                            WidthRequest="50"></Button>
                <Button Grid.Row="0" Grid.Column="1"
                        Text="B" 
                        MinimumHeightRequest="50"
                        MinimumWidthRequest="50" 
                        HeightRequest="50" 
                        WidthRequest="50" />
                <Label Grid.Row="1" Grid.Column="0" Text="Label2" HorizontalTextAlignment="Center"></Label>
                <Label Grid.Row="1" Grid.Column="1" Text="Label3" HorizontalTextAlignment="Center"></Label>
            </Grid>
        </FlexLayout>
    </Frame>
</AbsoluteLayout>

您可以通过绑定值转换器根据帧更改宽度和高度

绑定值转换器:

首先将名称设置为帧。

    <Frame
 …………
x:Name="frame"/>
 <ContentPage.Resources>
    <ResourceDictionary>
        <local:MyConverter x:Key="MyConverter" />
    </ResourceDictionary>
</ContentPage.Resources>
  <Button Grid.Row="0" Grid.Column="0" Text="A" 
                        WidthRequest="{Binding Source={x:Reference frame},Path=Width,Converter={StaticResource MyConverter}}"
                        HeightRequest="{Binding Source={x:Reference frame},Path=Height,Converter={StaticResource MyConverter}}"></Button>
                <Button Grid.Row="0" Grid.Column="1" Text="B"  
                        WidthRequest="{Binding Source={x:Reference frame},Path=Width,Converter={StaticResource MyConverter}}"
                        HeightRequest="{Binding Source={x:Reference frame},Path=Height,Converter={StaticResource MyConverter}}"/>
设置静态资源。

    <Frame
 …………
x:Name="frame"/>
 <ContentPage.Resources>
    <ResourceDictionary>
        <local:MyConverter x:Key="MyConverter" />
    </ResourceDictionary>
</ContentPage.Resources>
  <Button Grid.Row="0" Grid.Column="0" Text="A" 
                        WidthRequest="{Binding Source={x:Reference frame},Path=Width,Converter={StaticResource MyConverter}}"
                        HeightRequest="{Binding Source={x:Reference frame},Path=Height,Converter={StaticResource MyConverter}}"></Button>
                <Button Grid.Row="0" Grid.Column="1" Text="B"  
                        WidthRequest="{Binding Source={x:Reference frame},Path=Width,Converter={StaticResource MyConverter}}"
                        HeightRequest="{Binding Source={x:Reference frame},Path=Height,Converter={StaticResource MyConverter}}"/>

绑定到您的按钮。

    <Frame
 …………
x:Name="frame"/>
 <ContentPage.Resources>
    <ResourceDictionary>
        <local:MyConverter x:Key="MyConverter" />
    </ResourceDictionary>
</ContentPage.Resources>
  <Button Grid.Row="0" Grid.Column="0" Text="A" 
                        WidthRequest="{Binding Source={x:Reference frame},Path=Width,Converter={StaticResource MyConverter}}"
                        HeightRequest="{Binding Source={x:Reference frame},Path=Height,Converter={StaticResource MyConverter}}"></Button>
                <Button Grid.Row="0" Grid.Column="1" Text="B"  
                        WidthRequest="{Binding Source={x:Reference frame},Path=Width,Converter={StaticResource MyConverter}}"
                        HeightRequest="{Binding Source={x:Reference frame},Path=Height,Converter={StaticResource MyConverter}}"/>


看看这些帖子:@Nehl IT我做到了,完全有道理,但无法让它与百分比一起工作。谢谢你的回复。我必须说,我从未考虑过为此目的使用转换器。。我有一个开放的想法,我通常做所有的风格,但你如何判断使用哪种尺寸。。这似乎不是做这件事的方法,必须有更好的方法,每个人是如何做到的?当然,支持多个设备的大小必须是非常常见的…根据您提供的代码,按钮的宽度和高度设置为50。有时,设备上的按钮看起来很小。转换器根据框架的宽度和高度设置按钮的宽度和高度。它将自动固定框架的宽度和高度,并且不会在设备框架中执行过小的按钮。我将做一个小扣球,看看是否有效。如果它确实有效,我将非常感谢它的延迟,我必须承认,我没有想过以这种方式解决问题,但它有效!!我真的认为flexlayout会以某种方式解决这个问题,我渴望学习如何使用flex来解决这个问题