2012-06-21 49 views
7

我正在使用GridView在WinRT XAML應用程序中顯示不同組的項目組。一切都很好,除了ItemsPanelTemplate使用了一個包裹網格,當它的空間不足時,它會垂直堆疊我的物品。在WinRT XAML中的GridView組中的項目垂直滾動

所以,我試圖用StackPanel中,像這樣:

<GroupStyle.Panel> 
    <ItemsPanelTemplate> 
     <StackPanel Orientation="Vertical" Visibility="Visible" /> 
    </ItemsPanelTemplate> 
</GroupStyle.Panel> 

的項目是垂直堆疊的,這是偉大的,但現在的問題是,我不能滾動他們,他們不適合在屏幕上。所以我試圖啓用垂直滾動:

<GroupStyle.Panel> 
    <ItemsPanelTemplate> 
     <StackPanel Orientation="Vertical" Visibility="Visible" 
        ScrollViewer.VerticalScrollBarVisibility="Visible" 
        ScrollViewer.VerticalScrollMode="Enabled"/> 
    </ItemsPanelTemplate> 
</GroupStyle.Panel> 

但這並不行。 任何建議如何完成GridView組內的垂直滾動?

編輯1:

我也試過這樣:

<GroupStyle.Panel> 
    <ItemsPanelTemplate> 
     <ScrollViewer VerticalScrollBarVisibility="Visible" 
         HorizontalScrollMode="Disabled" 
         ZoomMode="Disabled" 
         VerticalScrollMode="Enabled"> 
       <StackPanel Orientation="Vertical" Visibility="Visible" /> 
     </ScrollViewer> 
    </ItemsPanelTemplate> 
</GroupStyle.Panel> 

這破壞了調試器作爲ItemsPanelTemplate需要面板作爲一個孩子。

回答

8

OK,我終於解決了!可能關注的人:

<GroupStyle.ContainerStyle> 
    <Style TargetType="GroupItem"> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="GroupItem"> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="*"/> 
        </Grid.RowDefinitions> 
        <ContentPresenter Content="{TemplateBinding Content}" Grid.Row="0"/> 
        <ItemsControl x:Name="ItemsControl2" ItemsSource="{Binding GroupItems}" Grid.Row="1"> 
         <ItemsControl.Template> 
         <ControlTemplate> 
          <ScrollViewer x:Name="ScrollViewer" VerticalScrollBarVisibility="Hidden"             VerticalScrollMode="Enabled" HorizontalScrollBarVisibility="Disabled"             HorizontalScrollMode="Disabled"> 
          <ItemsPresenter /> 
          </ScrollViewer> 
         </ControlTemplate> 
         </ItemsControl.Template> 
        </ItemsControl> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 
</GroupStyle.ContainerStyle> 

使用網格確保ScrollViewer正確縮放非常重要。

+0

你的scrollviewer如何正確縮放!我在網格中放置了一個水平流的ListView。我的整個ListView滾動而不是單個列。 – akshay2000

+0

好,是的。這是你必須做的。基本上將您的scrollviewer停靠在網格中,以便設置其高度,並且可以在其中滾動。 –

+0

XamlCompiler警告WMC1500:不推薦使用'ContainerStyle':ContainerStyle可能會在Windows 8.1之後被更改或不可用,並且不受ItemsControl.GroupStyle支持。 – Bos

0

我會把你的元素直接放在滾動查看器中。就像這樣:

<GroupStyle.Panel> 
<ItemsPanelTemplate> 
     <ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollMode="Disabled" ZoomMode="Disabled" VerticalScrollMode="Enabled"> 
      <StackPanel Orientation="Vertical" Visibility="Visible" /> 
     </ScrollViewer> 
</ItemsPanelTemplate> 

我希望這有助於 蘭斯

+2

感謝您的回覆。我也試過這個。這打破了調試器,因爲ItemsPanelTemplate需要面板作爲孩子。 –

+0

如果您放置額外的緩衝區網格或堆棧面板以容納滾動查看器,該怎麼辦?這應該滿足模板並且對用戶來說仍然是一樣的。 ItemsPanelTemplate> Stackpanel> Scrollviewer> Stackpanel –

+0

@LanceMcCarthy這也行不通。你仍然會得到調試器中斷。 – akshay2000

2

這是怎麼回事?

它呈現這樣的內容:
項目1項目2
項目3項目4

<ListView Width="200"> 
    <ListBoxItem> 
     <TextBlock>Item 1</TextBlock> 
    </ListBoxItem> 
    <ListBoxItem> 
     <TextBlock>Item 2</TextBlock> 
    </ListBoxItem> 
    <ListBoxItem> 
     <TextBlock>Item 3</TextBlock> 
    </ListBoxItem> 
    <ListBoxItem> 
     <TextBlock>Item 4</TextBlock> 
    </ListBoxItem> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapGrid Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
</ListView> 
0

你也可以想要設置的ScrollViewer爲禁用:)

問候

的ZoomMode