2016-07-19 11 views
0

Ich habe diese Beispielanwendung, wo ich versuche, die erste sichtbare Gruppe in der Listenansicht zu erhalten, wenn ich durch sie scrollen. Das Problem tritt auf, wenn ich nach oben blättern, um die ursprünglichen Elemente in der Listenansicht anzuzeigen. Er aktualisiert die oberste sichtbare Gruppe, aktualisiert sie aber nur dann korrekt, wenn die Liste durchsucht wird. Nehmen wir an, wenn ich Scrollen wähle (tippe, scrolle und entferne den Finger vom Bildschirm und lasse ihn mit der gegebenen Trägheit scrollen), manchmal wird er beim Aktualisieren des oberen sichtbaren Gruppenwertes zurückbleiben. Hier ist der Link zu meiner Beispiel-App: https://1drv.ms/u/s!AhChIerZubKRh3C4DhCZ3K7jpm6uErste sichtbare Gruppe in der ListView UWP

Bearbeiten: Ich habe das Video hochgeladen, um zu zeigen, was das Problem ist. Hier können Sie sehen, dass der obere Textblock wird nur aktualisiert, wenn das Scrollen vollständig stoppt: https://1drv.ms/v/s!AhChIerZubKRh3pmL6IsQNi0Mrm1

+0

Ich lief Ihre Probe auf Win10 PC und Windows Phone, aber die Reproduktion des Problems fehlgeschlagen. Könnten Sie bitte noch einmal überprüfen, ob dieses Beispiel das korrekte Beispiel ist, das das Problem reproduzieren kann? –

+0

Ja, es ist der korrekte Beispielcode, in dem ich immer noch mit dem Problem konfrontiert bin. Ich habe hier ein Video hochgeladen, um zu zeigen, mit welchem ​​Problem ich konfrontiert bin: https://1drv.ms/v/s!AhChIerZubKRh3pmL6IsQNi0Mrm1 – tavier

Antwort

1

Das Problem beim Scrollen ist, den TextBlock der Namen „tbHeader“ 's Lage ist, seine wirkliche Position im ListView, es ist mehr wie es gibt eine falsche für die Anzeige der Kopfzeile (ich werde sagen, eine Kopfzeile TextBlock in der Position zeigen), und wenn Scrollen gestoppt ist, ist es wie die Kopfzeile TextBlock wird in die Anzeigeposition des Headers von seiner Leseposition eingefügt.

So, hier ist meine Lösung, wir „tbHeader“ nicht mehr dem Namen nicht alle TextBlock s finden, können wir alle ListViewItemPresenter in diesem ListView finden und die erste Vorführung Artikel finden, schließlich zeigen seine „DateTimePropertyOfClassA“ (Header) Eigentum.

sv.ViewChanged += (ss, ee) => 
{ 
    //IEnumerable<TextBlock> tblocks = FindVisualChildren<TextBlock>(lv).Where(x => x.Name == "tbHeader"); 
    //if (tblocks != null) 
    //{ 
    // foreach (TextBlock tblock in tblocks) 
    // { 
    //  if (IsVisibileToUser(tblock, sv)) 
    //  { 
    //   first.Text = tblock.Text; 
    //   break; 
    //  } 
    // } 
    //} 
    IEnumerable<ListViewItemPresenter> presenters = FindVisualChildren<ListViewItemPresenter>(lv); 
    if (presenters != null) 
    { 
     foreach (ListViewItemPresenter presenter in presenters) 
     { 
      if (IsVisibileToUser(presenter, sv)) 
      { 
       var content = presenter.Content as ClassA; 
       first.Text = content.DateTimePropertyOfClassA.ToString(); 
       break; 
      } 
     } 
    } 
}; 

Der andere Code bleibt als der letzte Fall, den wir besprochen haben.

+0

Funktioniert perfekt, danke nochmal Grace :) – tavier

Verwandte Themen