问题标签 [ui-virtualization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2999 浏览

c# - ISupportIncrementalLoading 只触发一次

我正在尝试为虚拟化列表创建一个 Win8 Metro 参考应用程序。在做一些(非常稀疏的)阅读时,我发现支持这一点的推荐方法是通过ISupportIncrementalLoading界面。

我的参考应用程序出现问题,该LoadMoreItemsAsync方法被调用一次,但不再被调用,即使我的HasmoreItems属性被硬编码为返回 True。

下面的代码应该做的是加载 40 个项目,然后一次加载“x”个数字。发生的情况是它加载了前 40 个项目,然后被提示再加载 42 个,然后不再被要求再次加载。

这是我的代码的相关部分:

XAML

ViewModel 和支持类:

}

0 投票
0 回答
822 浏览

wpf - 使用 WPF ContextMenu 为 RichTextBox 加载大型数据集

我遇到的情况是 ContextMenu 的项目数已达到 3000 左右。在这种情况下,ContextMenu 会花费大量时间来加载自身。我正在尝试进行 UI 虚拟化,但没有任何运气。

示例代码如下:

请指导我如何解决这个问题?

谢谢!

苛刻的古普塔

0 投票
1 回答
313 浏览

c# - WPF 线虚拟化

我目前正在 WPF 中构建波形控件。我打算建立一个缩放功能。这意味着用户应该能够查看整个音频文件的每个样本。众所周知......而且audiofile可以有非常非常非常多的样本。所以我必须画很多线,这将是开销。

所以我考虑只在需要时才画线。问题是我不知道什么是最好和最干净的方法。您对我如何开始构建这样的功能有任何想法吗?我不想要一个看起来像炸脑筋的代码。如果有人有一个好主意来开始解决这个问题,我将非常感激。

0 投票
1 回答
2829 浏览

wpf - VirtualizingStackPanel 中基于 WPF 4.0 像素的滚动

我有以下 XAML 片段:

如您所见,我有 ScrollViewer.CanContentScroll="True" 和 utils:VirtualizingStackPanelAttachedProperties.IsPixelBasedScrollingEnabled="True" (这是一个附加属性,将 IsPixelBased 内部属性设置为 true,如此处所建议

这在 Windows XP 中按预期工作,其中滚动是细粒度的、基于像素的。
但是,这在滚动仍然基于项目的 Windows 7 中无法按预期工作,这与未将上述附加属性设置为 True 时在 Windows XP 中相同。
我可以在 Windows 7 中获得基于像素的滚动的唯一方法是将 CanContentScroll 设置为 False,但这会关闭虚拟化。

知道为什么会这样吗?是不是在 Windows XP 中,虚拟化虽然已启用但并没有真正起作用?

0 投票
1 回答
1909 浏览

wpf - 如何强制 ItemContainerGenerator 为项目生成容器或启用 UI 虚拟化时如何将 TreeView 滚动到扩展节点?

TreeView 没有ScrollIntoView()方法
唯一的方法是调用TreeVewItem.BringIntoView()相应的数据项容器。
但是如果 node 不可见并且还没有生成容器,ItemsControl.ItemContainerGenerator.ContainerFromItem()将返回null.

所以应该有一些方法来强制 ItemContainerGenerator 为项目创建容器。

合理的问题是:如何扩展节点并保持不可见?!

简单的!IsExpanded绑定到 VM 的属性。UI 虚拟化按预期工作:
TreeViewItem.Expanded 的事件处理程序仅在手动滚动到项目时被调用。

0 投票
2 回答
1514 浏览

wpf - TreeView 跳跃滚动

我有一个具有以下属性的虚拟化 TreeView:

TreeViewItem 的高度大致相同。

问题是,当向下滚动时,滚动条的手柄会改变大小并且滚动是“跳跃的”,这会导致用户体验很差。

如何获得更流畅的用户体验?

0 投票
0 回答
887 浏览

wpf - 虚拟化画布中的连续背景网格?

在我的 WPF 应用程序中,我有 ItemsControl,它具有ZoomableCanvas作为面板,它为 Canvas 提供虚拟化机制。这是完美的工作。此 Canvas 需要具有类似背景的图形。当我使用下面的 xaml 时,会生成网格,但仅限于视口的范围(在加载时)。因此,当滚动时,您会看到背景网格被垂直和水平剪切。在 performant-virtualized-wpf-canvas 中,这是通过将子 Visuals 添加到画布作为背景来处理的。

详细说明问题:请看这些图片:

在此处输入图像描述

On Load --- 背景网格是可见的,并且孩子的左边离 0,0 很远

On Scrolling Right and back - 背景网格被剪裁,孩子似乎从 Canvas 中的最左边开始

我们怎样才能有一个 Grid 背景,它延伸了 ZoomableCanvas 的整个宽度?我们如何解决 On Scroll 问题?

真诚感谢任何帮助/提示。

0 投票
1 回答
380 浏览

wpf - 如何在 Windows 8 应用程序中禁用容器回收?

如果您有时间,请创建一个新的空白应用 (XAML)模板并编写以下 XAML 代码。

我认为创建WPF 应用程序是没有用的,因为它看起来好像容器回收不起作用。此外,GridView必须替换为ListView

创建视图模型和Item类:

启动应用程序时,您可以滚动浏览一系列项目。我注意到,当您垂直滚动特定项目以便可以看到“这是项目#x”消息时,您会在向右滚动后再次看到另一条消息“这是项目#x”(尽管您没有滚动项目垂直。)

这是因为项目是虚拟化的。并且当一个项目变为现实时,将使用池中的一个容器。如果你运气不好,容器已经滚动了......

池中有 10 个项目:

代码隐藏文件中的程序输出

文件背后的代码:

接下来,我重铸了 ItemsPresenter 对象:

如果它有效,它不会提高性能。

有谁知道这个问题的优雅解决方案?我不想因为公共领域太多而被解雇;)我还考虑过写一个附加属性...

0 投票
1 回答
1369 浏览

wpf - 使用 VirtualizationMode.Recycling 时,TreeView 错误地将项目显示为展开

每当我使用 TreeView 时,我总是只有几个节点,每个节点通常少于 100 个项目。我从来没有真正需要任何类型的 ui 虚拟化,但现在我第一次需要它。

当使用具有回收模式的 ui 虚拟化时出现问题,TreeView 似乎扩展了项目,即使我从未手动扩展它们。

我用谷歌搜索了这个问题,据我所知,TreeView 中的虚拟化回收模式可以重用容器。

所以我认为原因可能是将已经扩展的重用容器应用于以前未扩展的项目。

这是一个简单的例子:

https://github.com/devhedgehog/wpf/

对于那些由于某种原因而无法下载代码的人来说,这基本上就是我尝试用 TreeView 做的事情。

这就是我在 XAML 中所拥有的。

这是后面的代码:

我希望有人可以为我提供解决此问题的方法。这是一个已知的错误?

如果它重复,我很抱歉。此外,我希望你们能告诉我我做错了什么,因为这是我在降级问题之前的第一篇文章。

0 投票
1 回答
11847 浏览

c# - WPF DataGrid 的 EnableRowVirtualization 和 VirtualizingStackPanel.IsVirtualizing 属性之间的区别

几乎没有关于设置影响的信息。

有人可以澄清一下有什么区别吗?

此外,作为额外的奖励,任何人都可以澄清 EnableRowVirtualization 和 EnableColumnVirtualization 是否真的在 3.5 网格上做任何事情,因为 MSDN 文档仅将这些属性列出回 4.0,但它们肯定存在于 3.5 中?

谢谢。