12

Ich benutze Listbox und Wrappanel für die Anzeige von Daten.Wie man ItemsPanel in LongListSelector umschließt?

Zum Beispiel:

<ListBox ItemTemplate="{StaticResource ItemTemplateListBoxAnimation}"> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <toolkit:WrapPanel ItemHeight="150" ItemWidth="150"> 
       </toolkit:WrapPanel> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
    </ListBox> 

    <DataTemplate x:Key="ItemTemplateListBoxAnimation"> 
     <Grid Width="130" Height="130"> 
      <Image Source="{Binding Image}"/> 
     </Grid> 
    </DataTemplate> 

Es ist wie folgt aussehen:

enter image description here

Jetzt ich LongListSelector und Gruppierungsergebnis verwenden müssen:

<toolkit:LongListSelector ItemTemplate="{StaticResource ItemTemplateListBoxAnimation}"> 
     <toolkit:LongListSelector.GroupItemsPanel> 
      <ItemsPanelTemplate> 
       <toolkit:WrapPanel/> 
      </ItemsPanelTemplate> 
     </toolkit:LongListSelector.GroupItemsPanel> 
    </toolkit:LongListSelector> 

Aber es ist wie folgt aussehen:

enter image description here

Ich brauche zu bekommen:

enter image description here

Ihre Annahmen? Danke

Antwort

5

Das Problem ist, dass die GroupItemsPanel Eigenschaft nicht die ItemsPanel der Hauptliste ändert sich, sondern die ItemsPanel der Gruppenköpfe, wie hier zu sehen ist (Bild von http://www.windowsphonegeek.com/articles/wp7-longlistselector-in-depth--part2-data-binding-scenarios):

group headers wrapped

Leider scheint das WP-Toolkit nicht das ItemsPanel zu offenbaren, das Sie wollen, also müssen Sie die Toolkit-Quelle ändern, um das gewünschte Verhalten zu erhalten.

  1. Erhalten Sie die Quelle von hier: https://phone.codeplex.com/SourceControl/changeset/view/80797

  2. Dekomprimieren, öffnen Sie die Microsoft.Phone.Controls.Toolkit.WP7.sln Lösung in Visual Studio auf.

  3. Unter dem Microsoft.Phone.Controls.Toolkit.WP7 Projekt, offene Themen/generic.xaml

  4. Blättern Sie zum Style, die LongListSelector gilt:

  5. (Targettype = "Kontrollen LongListSelector")
  6. ändern der TemplatedListBox.ItemsPanel zu einem WrapPanel

       <primitives:TemplatedListBox.ItemsPanel> 
            <ItemsPanelTemplate> 
             <controls:WrapPanel/> 
            </ItemsPanelTemplate> 
           </primitives:TemplatedListBox.ItemsPanel> 
    
  7. neu erstellen und verweisen auf die neue dll, Ihre Artikel sh würde richtig wickeln!

+0

Ausgezeichnete Antwort mit! Obwohl ein bisschen zu hacky für mich, so werde ich jetzt bei ListBox bleiben. – MEMark

3

Sie können es überschreiben, indem benutzerdefinierten Stil

<toolkit:LongListSelector 
         Background="{StaticResource FCBackground}" 
         HorizontalContentAlignment="Stretch" 
         ItemsSource="{Binding NowShowingEvents}" 
         ItemTemplate="{StaticResource EventsListMediumItemTemplate}" 
         IsFlatList="True" 
         Style="{StaticResource LongListSelectorStyleCustom}" 
           > 

        </toolkit:LongListSelector> 


    <Style x:Key="LongListSelectorStyleCustom" TargetType="toolkit:LongListSelector"> 
     <Setter Property="Background" Value="{StaticResource PhoneBackgroundBrush}"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="toolkit:LongListSelector"> 
        <toolkitPrimitives:TemplatedListBox x:Name="TemplatedListBox" Background="{TemplateBinding Background}"> 
         <toolkitPrimitives:TemplatedListBox.ItemContainerStyle> 
          <Style TargetType="ListBoxItem"> 
           <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
          </Style> 

         </toolkitPrimitives:TemplatedListBox.ItemContainerStyle> 
         <toolkitPrimitives:TemplatedListBox.ItemsPanel> 
          <ItemsPanelTemplate> 
           <toolkit:WrapPanel Margin="24,0,12,24"/> 
          </ItemsPanelTemplate> 
         </toolkitPrimitives:TemplatedListBox.ItemsPanel> 
        </toolkitPrimitives:TemplatedListBox> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style>