2016-07-20 13 views
1

Wenn ich ScrollIntoView für meine Listenansicht verwende, wird die Seite für einen Moment leer und dann neu gerendert, wie kann ich das weicher machen?So entfernen Sie das erneute Rendern während Windows UWP ScrollIntoView

Hier ist mein aktueller Code:

<ListView Name="MessageList" Margin="0,82,0,45" 
        SelectionMode="None" 
        IsItemClickEnabled="True" 
        ItemClick="FileMessage_Click" 
        HorizontalAlignment="Stretch" 
        ItemTemplateSelector="{StaticResource MsgDataTemplateSelector}" 
        ItemsSource="{x:Bind messages}" > 

     <ListView.ItemContainerStyle> 
        <Style TargetType="ListViewItem"> 
         <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
        </Style> 
     </ListView.ItemContainerStyle> 

</ListView> 

Und in der Code-Behind Ich habe diese jedes Mal, wenn eine neue Nachricht an die beobachtbaren Sammlung hinzugefügt wird, die in die Listview-Feeds:

MessageList?.ScrollIntoView(MessageList.Items[MessageList.Items.Count -1]); 
+0

Verwenden Sie Virtualisierung auf etwas? –

+0

Ich habe keine Virtualisierung hinzugefügt, ist das automatisch überall? – Jenny

+0

Ja, es ist automatisch. – AlexDrenea

Antwort

0

Ich habe dein Problem nicht vollständig reproduziert. Auf meinem PC tritt dieses Problem nur bei dem ersten Mal auf, zu dem ich Element ListView hinzufüge. ListView Verwenden Sie ItemsStackPanel als Standardanzeige, die UI-Virtualisierung unterstützt. Nachdem das Standardfenster in StackPanel geändert wurde, das keine UI-Virtualisierung unterstützt, wird das Problem nicht angezeigt.

Sie können die ItemsPanel von ListView ändern wie unten:

<ListView Name="MessageList" Margin="0,82,0,45" 
       SelectionMode="None" 
       Height="300" 
       IsItemClickEnabled="True" 
       HorizontalAlignment="Stretch" 
       ItemsSource="{x:Bind messages}" > 

      <ListView.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel></StackPanel> 
       </ItemsPanelTemplate> 
      </ListView.ItemsPanel> 

      <ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
       </Style> 
      </ListView.ItemContainerStyle> 

</ListView> 

Update: zur letzten Artikel blättern, können Sie die Höhe des Listview festlegen müssen und rufen ListView.UpdateLayout vor ScrollIntoView:

MessageList.UpdateLayout(); 
MessageList.ScrollIntoView(MessageList.Items[MessageList.Items.Count - 1]); 
+0

Dies scrollt mich nicht nach unten automatisch, das ist das Problem – Jenny

+0

Ich verwende auch eine Datenvorlage Selektor für 5 verschiedene Datenvorlagen, hat das Auswirkungen? – Jenny

+0

Sie müssen die Höhe von ListView festlegen und Update vor ScrollIntoView aufrufen. Bitte sehen Sie mein Update. –