我正在尝试创建一个视图,该视图具有几个位于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/

10-12 12:49