2015-07-19 94 views
0

有一個GridView控件,它的項目寬度由第一個寬度(截圖)GridView的項目寬度

我怎麼可以設置每個項目的一些汽車寬度設置?

<GridView ItemsSource="{x:Bind PopularItems}" Style="{StaticResource GVStyle}" Height="230"> 
<GridView.ItemTemplate> 
    <DataTemplate x:Name="GVTemp" x:DataType="models:LessDetails"> 
     <StackPanel> 
      <Image Height="180" Width="132" Source="{x:Bind Img}" /> 
      <TextBlock Margin="4,4,0,4" HorizontalAlignment="Stretch" TextAlignment="Center" 
     Text="{x:Bind Name}" Style="{ThemeResource BodyTextBlockStyle}" /> 
     </StackPanel> 
    </DataTemplate> 
</GridView.ItemTemplate> 

Width of items set by the first item

+0

在我看來,在你的情況下,你已經知道你想要的寬度是什麼(圖像的寬度加上一些東西)。也許你可以考慮在數據模板中顯式設置你想要的寬度並讓文本換行。這通常不是一個好的選擇,但在你的情況下它可能會這樣做。否則傑弗裏陳的解決方案是最好的,創建自己的ItemsControl。見[this](http://www.wintellect.com/devcenter/sloscialo/windows-8-gridview-and-variable-sized-items) – Corcus

回答

0

不能自動寬度在GridView控件中的每個項目,它是由設計使用的第一個項目的大小與大小均勻(ListViewItemPresenter每個項目有相同的尺寸)。

對於自動大小的場景,我建議你使用StackPanel或創建一個自定義的ItemsControl。

0

使用ItemsStackPanel:

<GridView.ItemsPanel> 
    <ItemsPanelTemplate> 
     <ItemsStackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Left" /> 
    </ItemsPanelTemplate> 
</GridView.ItemsPanel> 

唯一的缺點是,它不換行的項目。對於您可以使用ItemsWrapGrid但隨後就失去了自動調寬功能(第一項確定的寬度所有項目)。

還有VariableSizedWrapGrid可以通過給項目使用某個ColumnSpan/RowSpan來使用,但它與自動計算寬度並不完全相同。

如果你想要兩全其美,你可能需要編寫自己的自定義面板。

UPDATE:對於解決方案,允許兩個自動寬度和項目纏繞,則可以使用從該UWP Community Toolkit控制WrapPanel