Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin表单:StackLayout中ListView上的布局需要帮助_C#_Xamarin_Xamarin.forms - Fatal编程技术网

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

C# Xamarin表单:StackLayout中ListView上的布局需要帮助,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我正在尝试创建一个视图,其中有多个控件位于StackLayout的中心。当我只有这样一个: <StackLayout Orientation="Vertical" HorizontalOptions="Center" > <controls:BindablePicker /> </StackLayout> 它工作得很好: 但是,当我尝试添加ListView时,例如: <StackLayout Orientation="Vertical"

我正在尝试创建一个视图,其中有多个控件位于StackLayout的中心。当我只有这样一个:

<StackLayout Orientation="Vertical" HorizontalOptions="Center" >
    <controls:BindablePicker />
</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>

所有内容都左对齐并占据整个屏幕:

我希望所有控件的宽度尽可能短,以屏幕为中心。现在我正在使用ListView,因为我正在绑定一个对象列表,我认为这比尝试使用网格更容易

如有任何建议,将不胜感激。谢谢

更新我更新了我的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在
Orientation=“Vertical”
时仅支持
HorizontalOptions
属性,在
Orientation=“Horizontal”
时仅支持
VerticalOptions
属性

StackLayouts的这个“特性”没有很好的文档记录,我找不到一个示例链接来指定它。就我个人而言,我是在Xamarin大学的一节课上从老师那里学到这一点的

要使ViewCell的控件居中,请使用栅格布局而不是StackLayout。下面是一个例子:


非常感谢您的回复!我会尝试一下,如果我不能让它工作,我会告诉你。请参阅上面的更新。我离你更近了,但还是少了一块。谢谢你,艾德!如果有机会,让我们将此问题标记为已回答,并将更新移至StackOverflow上的新问题。这将有助于任何用户在未来与相同的初始问题,我非常高兴地帮助你与网格!新增问题: