2015-09-22 46 views
0

如何在Xamarin.Forms應用程序中居中列表視圖項目? 列表視圖項目當前是左對齊的。 我希望他們是中心對齊。Xamarin.Forms中心列表視圖項目

我有以下代碼:

<ListView Grid.Row="1" Grid.Column="0" ItemsSource="{Binding Results}" HorizontalOptions="Center"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <ViewCell> 
        <ViewCell.View> 
         <Grid HorizontalOptions="Center"> 
          <Grid.RowDefinitions> 
           <RowDefinition /> 
          </Grid.RowDefinitions> 

          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="auto" /> 
           <ColumnDefinition Width="auto" /> 
          </Grid.ColumnDefinitions> 

          <Label Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" /> 
          <Label Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" /> 
         </Grid> 
        </ViewCell.View> 
       </ViewCell> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

回答

3

斯科特格網總是擴展佔據100%的可用空間。沒有辦法,只要我可以告訴覆蓋這甚至明確地設置widthrequest在網格上似乎沒有幫助。

我假設你有一個更大的佈局要求,你試圖滿足作爲居中第一名和姓氏在listView將更好地完成與Stacklayout而不是網格。 IE

<ViewCell.View>  
<StackLayout Orientation="Horizontal"> 
    <Label Text="{Binding FirstName}" HorizontalOptions="EndAndExpand"/> 
    <Label Text="{Binding LastName}" HorizontalOptions="StartAndExpand"/> 
</StackLayout> 
</ViewCell.View> 

不過,假設你真的需要一個網格,然後我只能提供1除了托馬斯的建議。

<Grid> 
<Grid.RowDefinitions> 
<RowDefinition /> 
</Grid.RowDefinitions> 
<Grid.ColumnDefinitions> 
<ColumnDefinition Width="*"/> 
<ColumnDefinition /> 
<ColumnDefinition/> 
<ColumnDefinition Width="*"/> 
</Grid.ColumnDefinitions> 
<Label Grid.Row="0" Grid.Column="1" Text="{Binding FirstName}" HorizontalOptions="End"/> 
<Label Grid.Row="0" Grid.Column="2" Text="{Binding LastName}" /> 
</Grid> 

這在外面創建了兩列,把空間強制給了中間的名字。

0

也許是這樣的:

<Label Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" HorizontalOptions="Center"/> 
<Label Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" HorizontalOptions="Center"/> 

編輯:

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="5*" /> 
    <ColumnDefinition Width="5*" /> 
</Grid.ColumnDefinitions> 

<Label Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" HorizontalOptions="Center"/> 
<Label Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" HorizontalOptions="Center"/> 
+0

這不會做任何事情,因爲兩列都是「自動」大小的,所以第一列總是FirstName標籤的大小,第二列是剩餘的。 –

1

不必真正嘗試過...

你單元格視圖是<Grid HorizontalOptions="Center">,但網格本身已擴展到適合單元格,所以HorizontalOptions是無關緊要的。

你需要把輔助容器網格,將居中內, 是這樣的:

<ViewCell.View> 
    <Grid> 
    <StackPanel Orientation="Horizontal" HorizontalOptions="Center"> 
     <Label Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" /> 
     <Label Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" /> 
    </StackPanel> 
    </Grid> 
</ViewCell.View> 

您也可以嘗試(如果上述不工作)增加3列(3行垂直對齊)到大小爲(自動) - (*) - (自動)並將StackPanel放置在中心單元格中的Grid。