2014-01-16 3 views
2

переносит приложение Windows Phone в Windows Store и пытается создать сгруппированный ListView. В Dev Center есть good article, и группировка списка не представляет проблемы. Но есть некоторые вещи, которые я не понимаю о GroupStyle.Windows Store App ListView: как использовать GroupStyle?

Пример из статьи использует GroupStyleSelector, что приводит к следующему GroupStyle:

 <GroupStyle x:Key="listViewGroupStyle"> 
      <GroupStyle.HeaderTemplate> 
       <DataTemplate> 
        <Grid Background="LightGray" > 
         <TextBlock Text='{Binding Key}' Foreground="Black" Margin="10" 
         Style="{StaticResource SubheaderTextBlockStyle}" /> 
        </Grid> 
       </DataTemplate> 
      </GroupStyle.HeaderTemplate> 

      <GroupStyle.Panel> 
       <ItemsPanelTemplate> 
        <VariableSizedWrapGrid MaximumRowsOrColumns="3" Orientation="Horizontal"/> 
       </ItemsPanelTemplate> 
      </GroupStyle.Panel> 
     </GroupStyle> 

Цель GroupStyle.HeaderTemplate очевидна и изменения на этом шаблоне можно непосредственно наблюдать в рабочем приложении.

Но что такое GroupStyle.Panel? docs говорит:

Получает или задает шаблон, который создает панель, используемую для выкладки элементов.

Хорошо, но независимо от того, как я меняю ItemsPanelTemplate (BackgroundColor, Orientation и т. Д.), List не изменяется в запущенном приложении.

Кроме того, существует GroupStyle.ContainerStyle, который не используется в примере. Если вы добавите это в GroupStyle, это не будет иметь никакого увеличения в списке в запущенном приложении.

Итак, что такое GroupStyle.Panel и GroupStyle.ContainerStyle? Как правильно использовать?

+0

Прежде всего, вы используете 'WrapGrid' там. Попробуйте переключить его на нечто вроде «StackPanel», если вы хотите, чтобы он был традиционным списком. –

ответ

1

Я выяснил, что вам нужно также установить ItemsPanel в ListView. По умолчанию используется элемент ItemsStackPanel, который, похоже, не позволяет создавать пользовательскую панель в сгруппированном ListView. При установке ItemsPanel на VirtualizationStackPanel применяется настраиваемая панель, но заголовки больше не являются липкими. Кажется, что что-то сломалось в текущей реализации ListView/ItemsStackPanel, и поскольку у нас нет доступа к источнику, трудно сказать, что.

<ListView 
     ItemsSource="{Binding Source={StaticResource namesSource}}" 
     > 
      <ListView.GroupStyle> 
       <GroupStyle> 
        <GroupStyle.HeaderTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Key}" Foreground="Yellow" FontSize="{ThemeResource HubHeaderFontSize}" Margin="6" /> 
         </DataTemplate> 
        </GroupStyle.HeaderTemplate> 
        <GroupStyle.Panel> 
        <ItemsPanelTemplate> 
         <controls:WrapPanel /> 
        </ItemsPanelTemplate> 
       </GroupStyle.Panel> 
       </GroupStyle> 
      </ListView.GroupStyle> 
      <ListView.ItemsPanel> 
       <ItemsPanelTemplate> 
        <!--<ItemsWrapGrid FlowDirection="LeftToRight" Orientation="Vertical"/>--> 
        <VirtualizingStackPanel Orientation="Vertical"/> 
        <!--<ItemsStackPanel Orientation="Vertical"/>--> 
       </ItemsPanelTemplate> 
      </ListView.ItemsPanel> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <Grid Background="AliceBlue" Margin="3,0"> 
         <TextBlock Text="{Binding}" Foreground="Black" Margin="4,2"/> 
        </Grid> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
Смежные вопросы