Xamarin Forms StackLayout:如何将子项的宽度/高度设置为百分比
Xamarin Forms StackLayout: How to set width / height of children to percentages
有没有办法创建一个垂直堆栈布局,其中按钮占父级的 30%,文本输入占父级的 70%?像这样:
<StackLayout Orientation="Vertical">
<Entry Height="70%"></Entry>
<Button Height="30%">Click me</Button>
</StackLayout>
但这行不通。到目前为止唯一的解决方案是创建一个完整的网格项目并使用它。没有其他解决方案吗?
在这种情况下,StackLayout 不能很好地适应不同的高度。在这一点上,Xamarin Forms 引擎不如 WPF 引擎全面。基本上你得去
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="7*" />
<RowDefinition Height="3*" />
</Grid.RowDefinitions>
<Entry Grid.Row="0" VerticalOptions="Fill"></Entry>
<Button Grid.Row="1" VerticalOptions="Fill">Click me</Button>
</Grid>
另请注意,只有网格可以扩展到其父元素的全宽或全高。 StackLayout 由其子项的总和确定其最大大小,除非它们在 Grid 中并且您放置 HorizontalOptions="Fill"
和 VerticalOptions="Fill"
.
完成此操作的唯一其他方法是从 OS 获取 DeviceHeight 和 Width 并手动设置元素的高度。一种复杂且通常有缺陷的方法,我不推荐。
虽然您可以使用网格来做到这一点,但还有更适合它的布局
绝对布局
您可以设置排名比例:
AbsoluteLayout.LayoutBounds=".5,1,.5,.1"
有没有办法创建一个垂直堆栈布局,其中按钮占父级的 30%,文本输入占父级的 70%?像这样:
<StackLayout Orientation="Vertical">
<Entry Height="70%"></Entry>
<Button Height="30%">Click me</Button>
</StackLayout>
但这行不通。到目前为止唯一的解决方案是创建一个完整的网格项目并使用它。没有其他解决方案吗?
在这种情况下,StackLayout 不能很好地适应不同的高度。在这一点上,Xamarin Forms 引擎不如 WPF 引擎全面。基本上你得去
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="7*" />
<RowDefinition Height="3*" />
</Grid.RowDefinitions>
<Entry Grid.Row="0" VerticalOptions="Fill"></Entry>
<Button Grid.Row="1" VerticalOptions="Fill">Click me</Button>
</Grid>
另请注意,只有网格可以扩展到其父元素的全宽或全高。 StackLayout 由其子项的总和确定其最大大小,除非它们在 Grid 中并且您放置 HorizontalOptions="Fill"
和 VerticalOptions="Fill"
.
完成此操作的唯一其他方法是从 OS 获取 DeviceHeight 和 Width 并手动设置元素的高度。一种复杂且通常有缺陷的方法,我不推荐。
虽然您可以使用网格来做到这一点,但还有更适合它的布局 绝对布局
您可以设置排名比例: AbsoluteLayout.LayoutBounds=".5,1,.5,.1"