【问题标题】:ListView ScrollTo without delay on UWPListView ScrollTo 在 UWP 上无延迟
【发布时间】:2017-08-28 00:45:38
【问题描述】:

我创建了一个简单的ListView,正如我在ListView is not scrolling with grouping 问题中所展示的那样。

我的问题是,在 UWP 上,我需要在 Windows Phone 上插入 await Task.Delay(1500),在 Windows 桌面上插入大约 200ms
我没有用大量数据填充ListView,所以我也想知道,当用户运行它时会发生什么,因为他们可以拥有大量数据。

但是为什么我需要它,因为在我看来它是一个错误的代码?

没有Task.Delay 我得到的例外是Error HRESULT E_FAIL has been returned from a call to a COM component.

消息是

System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component.
   at Windows.UI.Xaml.UIElement.Measure(Size availableSize)
   at Xamarin.Forms.Platform.UWP.VisualElementRenderer`2.MeasureOverride(Size availableSize)
   at Windows.UI.Xaml.UIElement.Measure(Size availableSize)
   at Xamarin.Forms.Platform.UWP.VisualElementRenderer`2.MeasureOverride(Size availableSize)
   at Windows.UI.Xaml.UIElement.Measure(Size availableSize)
   at Xamarin.Forms.Plat

如何修复此错误/错误代码?

更新
如果我设置HasUnevenRows = false 它不会崩溃,但它只是滚动到不正确的ViewCell。但我需要使用HasUnevenRows = true
如果我设置 HasUnevenRows = false 和 RowHeight,也会出现同样的问题。

【问题讨论】:

  • 我认为这可能与将ListView 包装在Grid 中有关。看看这个bug report。虽然ScrollViewGrid 当然不同,但在这种特殊情况下可能会导致问题。您至少可以尝试将其从Grid 中取出来验证它是否有效?
  • 不,它仍然崩溃:(
  • 我创建了一个sample application 来重现您的问题(ListView is not scrolling with grouping)。它还使用Task.Delay()模拟了来自服务器的响应,但没有抛出异常。
  • 如我所见,唯一的区别是,我设置了 IsPullToRefreshEnabled = true,当然还有一个 Command 和 IsRefreshing 属性。而且我一直在使用 C# 而不是 XAML。

标签: c# listview xamarin uwp xamarin.forms


【解决方案1】:

我的问题与您的类似,Task.Delay() 使滚动在 iOS 上工作。原因是线程,滚动与其他“任务”不同步。离开后

Device.BeginInvokeOnMainThread(() =>
{
   listView.ScrollTo(defaultItem, ScrollToPosition.Center, true);
});

listView.ScrollTo(defaultItem, ScrollToPosition.Center, true);

我不再需要Task.Delay(),现在滚动确实有效。虽然我从来没有遇到过你的例外。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    相关资源
    最近更新 更多