Xamarin表单:StackLayout中ListView上的布局需要帮助

时间:2016-11-28 18:44:10

标签: c# xamarin xamarin.forms

我试图创建一个在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>

这几乎是我想要的,除了顶部选择器占据屏幕的整个宽度,而不是只需要它的宽度和居中。

1 个答案:

答案 0 :(得分:3)

您的第一个StackLayout示例与第二个StackLayout示例(ViewCell内部的示例)之间存在一个小差异,这会导致您遇到的麻烦:

  • 第一个StackLayout示例是Orientation="Vertical"
  • 第二个StackLayout示例(ViewCell内部的示例)是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/