我正在尝试创建一个视图,该视图具有几个位于StackLayout内部的控件。当我只有一个这样的人时:
<StackLayout Orientation="Vertical" HorizontalOptions="Center" >
<controls:BindablePicker />
</StackLayout>
它工作正常:
Centered
但是,当我尝试添加ListView时,例如:
<StackLayout Orientation="Vertical" HorizontalOptions="Center" >
<controls:BindablePicker />
<ListView HorizontalOptions="Center" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout Orientation="Horizontal">
<controls:BindablePicker Title="Length" />
<controls:BindablePicker Title="Units" />
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
一切都是合理的,并占据了整个屏幕:
Left justified
我希望所有控件的宽度在屏幕中央尽可能短。现在,我正在使用ListView,因为我绑定了对象列表,并且我认为这比尝试使用Grid容易。
任何建议将不胜感激。谢谢。
更新我更新了ViewCell,用网格替换了StackLayout,然后将ListView放在网格内,如下所示:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ListView Grid.Row="0" Grid.Column="1" HorizontalOptions="Center" SeparatorVisibility="None">
这几乎是我想要的,除了顶部选择器占用了屏幕的整个宽度,而不是只需要将其居中并居中。
最佳答案
您的第一个StackLayout示例和第二个StackLayout示例(ViewCell内部的示例)之间有一个小的差异,这引起了您遇到的麻烦:
第一个StackLayout示例是Orientation="Vertical"
第二个StackLayout示例(ViewCell内部的示例)为Orientation="Horizontal"
Xamarin.Forms中的StackLayouts仅在HorizontalOptions
时使用Orientation="Vertical"
属性,而在VerticalOptions
时仅使用Orientation="Horizontal"
属性。
StackLayouts的这种“功能”没有得到很好的记录,我找不到指定它的示例链接。我个人是在Xamarin大学的一次课堂上从老师那里学到这一事实的。
要居中放置ViewCell的控件,请使用Grid布局而不是StackLayout。这是一个例子:
http://www.trsneed.com/customize-xamarin-forms-listview-with-viewcell/
关于c# - Xamarin表单:需要在StackLayout内的ListView上进行布局的帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40851306/