我试图创建一个在StackLayout中居中的几个控件的视图。当我只有一个这样的时候:
Func<ICacheItemWrapper>
工作正常: Centered
但是,当我尝试添加ListView时,例如:
<StackLayout Orientation="Vertical" HorizontalOptions="Center" >
<controls:BindablePicker />
</StackLayout>
一切都是合理的,占据了整个屏幕: Left justified
我希望所有控件的宽度尽可能短,以屏幕为中心。现在我使用ListView,因为我绑定了一个对象列表,我认为这比尝试使用Grid更容易。
任何建议都将不胜感激。感谢。
UPDATE 我更新了我的ViewCell,用Grid替换了StackLayout,然后将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>
这几乎是我想要的,除了顶部选择器占据屏幕的整个宽度,而不是只需要它的宽度和居中。
答案 0 :(得分:3)
您的第一个StackLayout示例与第二个StackLayout示例(ViewCell内部的示例)之间存在一个小差异,这会导致您遇到的麻烦:
Orientation="Vertical"
Orientation="Horizontal"
Xamarin.Forms中的StackLayouts仅在HorizontalOptions
时尊重Orientation="Vertical"
属性,并且仅在VerticalOptions
时尊重Orientation="Horizontal"
属性。
StackLayouts的这个“功能”没有很好地记录,我找不到指定它的示例链接。就个人而言,我在Xamarin大学课堂上从一位导师那里了解到了这一事实。
要使ViewCell的控件居中,请使用网格布局而不是StackLayout。这是一个例子:
http://www.trsneed.com/customize-xamarin-forms-listview-with-viewcell/