Mám pozorovateľný kolekčný denník, ktorý sa vkladánové položky v hornej časti systému Windows Universal App. Umožnil som používateľom zobraziť denník tým, že ho viaže na položky kontroly. Ak je v denníku veľké množstvo prichádzajúcich aktualizácií, môže to byť ťažké, pretože bude pokračovať v rolovaní pri pridávaní nových položiek. Chcel by som pridať tlačidlo pre pozastavenie prerušenia rolovania alebo dokonca aktualizácie.
Vidím beginupdate a endupdate, ale tie lenZdá sa, že sa vzťahujú na kontroly WPF. Takisto zvažujem niečo v mojej triede logov, aby som vypol zdvihnutie udalosti zmenenej na nehnuteľnosti, ale nie som si istý, ako hladko aktualizovať všetko, čo mi bolo zmeškané, keď sa kontrola položiek nepoužíva?
odpovede:
0 pre odpoveď č. 1Prišiel som s riešením ... Položil som položku controlcontrol do scrollviewer namiesto scrollviewer v položke ItemContainerStyle.
Takže v podstate sledujem virtuálneveľkosť vyhľadávacieho programu a sledovanie zbierky denníkov. Pri pozastavení a zmene kolekcie presuňte vertikálny posun navigačného ovládača o to, ako veľmi rástol, pričom animácia bola zablokovaná, takže pohyb nie je viditeľný, takže viditeľne zostane na tom istom mieste.
private void Page_Loaded(object sender, RoutedEventArgs e)
{
Log.Entries.CollectionChanged += Entries_CollectionChanged;
this.LogItemsControl.ItemsSource = Log.Entries;
lastExtentHeight = this.ScrollViewer.ExtentHeight;
}
private void Entries_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
lastExtentHeight = this.ScrollViewer.ExtentHeight;
if (scrollingPaused)
{
double sizeGrown = ScrollViewer.ExtentHeight - pausedExtentHeight;
pausedVerticalOffset += sizeGrown;
pausedExtentHeight = ScrollViewer.ExtentHeight;
this.ScrollViewer.ChangeView(0, pausedVerticalOffset, 1, true);
}
}
private void PlayPauseAppBarButton_Click(object sender, RoutedEventArgs e)
{
if (scrollingPaused)
{
// UnPause
scrollingPaused = false;
}
else
{
// Pause
pausedVerticalOffset = this.ScrollViewer.VerticalOffset;
pausedExtentHeight = lastExtentHeight;
scrollingPaused = true;
}
}