2016-11-27 104 views
0

我使用綁定到集合的網格視圖。該集合保存着未知數量的項目,我想限制GridView在一行中只顯示5個項目。每個項目都包含在一個包含文本塊和圖像的堆疊面板內。GridView中的項目數量限制C#UWP

A.如何限制GridView中的項目數量? B.如果我不想限制它,我怎樣才能製作一行gridview,用一個小箭頭將網格滾動到一邊?

這裏是我的XAML代碼:

<GridView Name="ListViewGrid" Background="Azure" 
       Grid.Row="2" 
       ItemsSource="{x:Bind ForeCasts}" 
       Foreground="Chartreuse" 
       HorizontalAlignment="Stretch" > 
     <GridView.ItemTemplate> 
      <DataTemplate x:DataType="data:ForeCast"> 
       <StackPanel Orientation="Vertical" Margin="20,20,20,20" Height="260" Width="260"> 
        <TextBlock HorizontalAlignment="Center" Margin="10,10,10,10"> 
         <Run Text="{x:Bind TempString}" FontSize="24" Foreground="Black"/> 
         <Run Text="&#x00B0;" FontFamily="Segoe Print" FontSize="24"/> 
         <Run Text="C" FontSize="24"/> 
        </TextBlock> 
        <Image Source="{x:Bind ImageString}" Width="60" Height="60"/> 
       </StackPanel> 
      </DataTemplate> 
     </GridView.ItemTemplate> 
    </GridView> 

回答

2

收集拿着一個未知數量的項目,我想,限制GridView顯示在一行中只有5個項目。

GridView使用ItemsWrapGrid作爲默認ItemsPanel。並且ItemsWrapGrid有一個MaximumRowsOrColumns property。有了這個屬性,我們可以限制包裝之前出現的最大行數或列數。該屬性適用於Orientation屬性。要顯示在一排只有5個項目,我們可以設置它像以下:

<GridView.ItemsPanel> 
    <ItemsPanelTemplate> 
     <ItemsWrapGrid MaximumRowsOrColumns="5" Orientation="Horizontal" /> 
    </ItemsPanelTemplate> 
</GridView.ItemsPanel> 

請注意:MaximumRowsOrColumns只限制最大數,如果GridView不夠大,你可能會看到更少的項目。

如果我不想限制它,我該如何製作一行gridview,並用小箭頭將網格滾動到一邊?

要顯示水平堆疊的集合,我們通常使用ListView。如果你想使用GridView,您可以使用ItemsStackPanel代替ItemsWrapGrid像以下:

<GridView.ItemsPanel> 
    <ItemsPanelTemplate> 
     <ItemsStackPanel Orientation="Horizontal" /> 
    </ItemsPanelTemplate> 
</GridView.ItemsPanel> 

要啓用滾動,你可能還需要設置ScrollViewer.HorizontalScrollBarVisibility財產和ScrollViewer.HorizontalScrollMode性質類似以下內容:

<GridView Name="ListViewGrid" 
      Grid.Row="2" 
      HorizontalAlignment="Stretch" 
      Background="Azure" 
      Foreground="Chartreuse" 
      ItemsSource="{x:Bind ForeCasts}" 
      ScrollViewer.HorizontalScrollBarVisibility="Visible" 
      ScrollViewer.HorizontalScrollMode="Enabled"> 
    <GridView.ItemTemplate> 
     <DataTemplate x:DataType="data:ForeCast"> 
      <StackPanel Width="260" 
         Height="260" 
         Margin="20,20,20,20" 
         Orientation="Vertical"> 
       <TextBlock Margin="10,10,10,10" HorizontalAlignment="Center"> 
        <Run FontSize="24" Foreground="Black" Text="{x:Bind TempString}" /> 
        <Run FontFamily="Segoe Print" FontSize="24" Text="&#x00B0;" /> 
        <Run FontSize="24" Text="C" /> 
       </TextBlock> 
       <Image Width="60" Height="60" Source="{x:Bind ImageString}" /> 
      </StackPanel> 
     </DataTemplate> 
    </GridView.ItemTemplate> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <ItemsStackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
</GridView> 
+0

你好周杰倫說,例如我使用ItemsWrap GridMaximumRowsOrColumns =「3」,並且我總共有18項由6行顯示。但是,我只想顯示第1行或者第1&2行。有沒有辦法做到這一點? – axcelenator

+0

@axcelenator如果您只想顯示第一行,那麼您可能需要更改'ItemsSource'。例如,如果要顯示前三項,可以從'ForeCasts'中檢索它們,並將三項設置爲'ItemsSource'。 –

+0

謝謝。得到它了。我認爲有一些方法可以在不更改原始來源的情況下限制該來源。 – axcelenator