【问题标题】:How to create a custom VirtualizingPanel on Windows Phone 8.1 / Windows 10?如何在 Windows Phone 8.1 / Windows 10 上创建自定义 VirtualizingPanel?
【发布时间】:2015-10-09 01:20:06
【问题描述】:

我正在尝试在 Windows 10 和 Windows Phone 8.1 (app link) 中执行此操作:

我有一个名为 FluidPanel 的自定义类,它扩展了 Panel 并覆盖了方法 MeasureOverride 和 ArrangeOverride。 目标是创建Google Keep appearence。好的,一切正常。

但是,因为我使用 基本面板作为 ItemsPanelTemplate,所以项目重新排序不起作用。此外,转换不起作用,也不能虚拟化。

所以,我想知道如何创建一个自定义面板来重新排序项目并像 GridView 的 ItemsWrapGrid 一样进行虚拟化

我尝试扩展 VirtualizingPanel 类,但它不断向我显示这个看起来像错误的错误:

'VirtualizingPanel' 不包含取 0 的构造函数 论据

希望有人能指点一下。

【问题讨论】:

    标签: c# xaml windows-phone windows-10 windows-10-mobile


    【解决方案1】:

    您不能从 C# 中的“VirtualizingPanel”继承,因为它是一个 Windows 运行时类,并且没有 Windows 元数据(windows.winmd 文件)公开的构造函数。 UI 虚拟化只是一个概念,会有点复杂,但可以从头开始实现。 我认为在 WPF 中实现虚拟化面板的博客系列将是一个好的开始。

    第 1 部分:http://blogs.msdn.com/b/dancre/archive/2006/02/06/526310.aspx

    第 2 部分:http://blogs.msdn.com/b/dancre/archive/2006/02/13/531550.aspx

    第 3 部分:http://blogs.msdn.com/b/dancre/archive/2006/02/14/532333.aspx

    P.S:博客是关于WPF的,但基本思路是一样的。

    【讨论】:

    • 感谢您的澄清!但我不应该专注于虚拟化部分,重新​​排序和转换是我面临的真正问题。我要删除这个问题。请看这个:*.com/questions/31623799/…
    • @Jeffrey 我知道它是一个老线程,但我确实需要创建一个自定义的虚拟化面板。你提到的文章中的 VirtualizingTilePanel 是从 VirtualizingPanel 派生的,并实现了 IScrollInfo。那么如果无法扩展 VirtualizingPanel,我应该从 UWP 或 Windows 商店应用程序中派生哪个类?我是否也必须使用 c++ 将其创建为 Windows 运行时类?谢谢!