2014-09-20 141 views
3

我正在構建一個通用應用程序,我的Win8.1應用程序必須顯示一個網格物品。通常情況下,網格由3列組成,但在較小的屏幕上,我希望項目能夠包裹,因此只有2列(甚至1)。這是我的代碼:Windows 8.1如何自動包裝網格物品?

<GridView ItemsSource="{Binding Regions}" IsItemClickEnabled="True"> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <ItemsWrapGrid Orientation="Horizontal" MaximumRowsOrColumns="3" MinWidth="400" /> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
    <GridView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" Margin="10"> 
       <Image Source="{Binding Code, Converter={StaticResource FlagIconConverter}, ConverterParameter='/Assets/Icons/Flags/{0}.png'}" Width="30" /> 
       <TextBlock Text="{Binding NativeName}" Style="{StaticResource BodyTextBlockStyle}" Margin="10,0,0,10" VerticalAlignment="Center" /> 
      </StackPanel> 
     </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 

每當我使應用程序變小,項目不會自動換行。我試圖通過更改MaximumRowsOrColumns財產VisualStateManager解決此問題,但由於某些原因無法訪問我的WrapGrid不起作用。從代碼隱藏更改屬性也不起作用,因爲它再次無法訪問WrapGrid。

我試了這個既WrapGridItemsWrapGrid(有什麼區別?)和ListViewGridView。那裏沒有區別。

有誰知道如何做到這一點?

回答

5

你應該不需要做任何事情。它應該基於可用的客戶區進行換行。我能想到的唯一的事情就不會讓它包裹的是,你把你的<GridView>固定寬度容器或容器是尺寸Auto中,你不更新觀察集合通知網格重繪內/更新自己。

例如,這不會換行。

<Grid Width="1000"> 
    <GridView x:Name="myGridView" IsItemClickEnabled="True"> 
     <GridView.ItemsPanel> 
      <ItemsPanelTemplate> 
       <ItemsWrapGrid Orientation="Horizontal" MaximumRowsOrColumns="5"/> 
      </ItemsPanelTemplate> 
     </GridView.ItemsPanel> 
     <GridView.ItemTemplate> 
      <!-- DATATEMPLATE --> 
     </GridView.ItemTemplate> 
    </GridView> 
</Grid> 

但是擺脫Width=1000的,它會換行。

實施例3個的輸出大小不同

enter image description here

+0

這就是奇數。樹看起來像這樣:''''''''Grid' - >'GridView'。它所在的網格列的寬度爲Auto。沒有固定的寬度。儘管如此,當我將窗口變小時,它看起來像這樣:http://i.imgur.com/huNUA6Q.png。 – 2014-09-21 11:22:20

+0

嗯,發現問題。這是因爲我把wrapgrid內1列在那裏我有3列(等等wrapgrid的每一側一個額外的列。之後我設置的columnspan 3,它開始包裝像它應該的。如果你可以更新你的答案,包括這一點,我會接受它:) – 2014-09-21 11:25:11

+0

甜:)'Auto'大小將作爲固定大小相同的效果。網格只會計算一次大小......除非綁定的集合發生變化。所以調整應用程序不會影響它。將你的'Auto'改爲'*',你可以調整你的App的大小,它會改變網格的換行。 :),我會更新解決方案以避免Auto。 – 2014-09-21 11:48:23