【问题标题】:Temporarily pause scrolling on an ItemsControl as new items are added in UWP在 UWP 中添加新项目时暂时暂停 ItemsControl 上的滚动
【发布时间】:2015-10-16 03:09:45
【问题描述】:

我有一个 observablecollection 日志,它将新条目插入到 Windows 通用应用程序的顶部。我让用户通过将日志绑定到项目控件来查看日志。如果日志中有很多传入的更新,它可能很难使用,因为它会随着新项目的添加而不断滚动。我想添加一个暂停按钮来暂停滚动或更新。

我看到 beginupdate 和 endupdate,但这些似乎只适用于 WPF 控件。我还在考虑在我的日志类中关闭引发 propertychanged 事件的功能,但我不确定如何在 itemscontrol 取消暂停时无缝更新错过的所有内容?

【问题讨论】:

  • 您可以只添加一个间接级别,当列表暂停时,更新被送入队列。不要更新主要列表。取消暂停后,只需将队列移动到绑定列表即可。

标签: c# xaml windows-runtime win-universal-app


【解决方案1】:

我想出了一个解决方案...我将 itemscontrol 放入滚动查看器,而不是 ItemContainerStyle 中的滚动查看器。

所以基本上我会跟踪滚动查看器的虚拟大小并跟踪日志收集。当暂停并且集合发生变化时,将滚动查看器的垂直偏移量移动它刚刚增长的量,并禁用动画,因此移动不可见,因此它明显地保持在同一个位置。

    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;
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多