2012-06-21 18 views
7

Sto utilizzando GridView per la visualizzazione di gruppi di diversi gruppi di elementi in un'app XAML WinRT. Tutto funziona bene, tranne che ItemsPanelTemplate utilizza una griglia di wrapping che impila i miei oggetti verticalmente quando è fuori dallo spazio.Scorrimento verticale all'interno del gruppo GridView di elementi in WinRT XAML

Così, ho cercato di usare StackPanel, in questo modo:

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

Gli articoli sono impilati verticalmente, e che è grande, ma il problema è che ora non riesco a scorrere, e non lo fanno adattarsi allo schermo. Così ho provato a abilitare lo scrolling verticale:

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

Ma questo non funziona. Qualche suggerimento su come eseguire lo scorrimento verticale all'interno del gruppo GridView?

EDIT 1:

Inoltre ho provato questo:

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

Questo rompe il debugger come ItemsPanelTemplate ha bisogno di un pannello come un bambino.

risposta

8

OK, ho finalmente risolto! A chi può interessare:

<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> 

E 'importante che si utilizza la rete per assicurarsi che lo ScrollViewer scale in modo corretto.

+0

Come mai il tuo scrollviewer sta scalando correttamente! Metto un ListView con flusso orizzontale all'interno di una griglia. Il mio intero ListView scorre piuttosto che singole colonne. – akshay2000

+0

Buono, sì. Questo è ciò che devi fare. In pratica, aggancia il tuo scrollviewer in una griglia in modo che la sua altezza sia impostata e puoi scorrere al suo interno. –

+0

Avviso XamlCompiler WMC1500: 'ContainerStyle' è obsoleto: ContainerStyle potrebbe essere modificato o non disponibile per le versioni successive a Windows 8.1 e non è supportato per ItemsControl.GroupStyle. – Bos

0

Inserirò i tuoi elementi all'interno di un visualizzatore di scorrimento direttamente. Come questo:

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

Spero che questo aiuta, Lance

+2

Grazie per la risposta. Ho provato anche questo. Questo interrompe il debugger, in quanto ItemsPanelTemplate ha bisogno di un pannello da bambino. –

+0

Cosa succede se si posiziona una griglia di buffer aggiuntiva o un pannello di stack per contenere lo scrollviewer. Questo dovrebbe soddisfare il modello e apparire allo stesso modo all'utente. ItemsPanelTemplate> Stackpanel> Scrollviewer> Stackpanel –

+0

@LanceMcCarthy Anche questo non funzionerà. Otterrai comunque un'interruzione del debugger. – akshay2000

2

Che dire di questo?

Rende elementi come questo:
Voce 1 Voce 2
Voce 3 Voce 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

Si può anche vuole impostare la ZoomMode del ScrollViewer per disabili :)

Saluti

Problemi correlati