问题标签 [virtualizingstackpanel]

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 投票
1 回答
981 浏览

wpf - ItemsControl 中的项目呈现问题

我会保持简洁。我有一个实现 ItemTemplate 的 ListBox。DataTemplate 包含一个复选框。我加载了大约 2000 个项目。我检查前 5 个项目,滚动到底部并选择最后 5 个项目。然后我向上滚动到顶部项目,并注意到我的前 5 个检查项目已被修改。

希望对此有一个很好的解释 - 这是一个 MS 错误。这发生在 .NET 3.5 和 4.0 中。当 VirtualingStackPanel.IsVirtualizing 设置为 false 时,不会发生这种行为,但在现实世界中,没有虚拟化的加载是痛苦的。

一些见解会很好。

提前致谢,

安德烈斯·奥利瓦雷斯

0 投票
2 回答
2294 浏览

.net - VirtualizingStackPanel 未正确处理折叠的项目

我有一个ListView用于显示字段列表的 in wpf;基于属性值,某些字段可以在运行时折叠。它工作正常,除了 ListVIew 不会折叠为 ListViewItem 保留的空间,该空间在运行时折叠。

在此处输入图像描述

我能够在 Snoop 中看到额外的 ListViewItems(具有折叠的可见性),ListView 也会向上移动项目,但它不会调整其高度以移除空白空间!

我可以肯定地说,这是因为VirtualizedStackPanel将 ItemsPanel 更改为 StackPanel 解决了问题。这是相关的ListViewXAML:

这是一个错误VirtualizingStackPanel吗?还有其他人遇到过类似的问题吗?任何解决方法?


更新:

在连接时将此错误报告给 MS - https://connect.microsoft.com/VisualStudio/feedback/details/734113/virtualizingstackpanel-not-handling-collapsed-items-correctly

0 投票
1 回答
1293 浏览

wpf - 不裁剪项目的虚拟化面板

因此,如果项目在滚动区域的末尾被剪切/裁剪,那么拥有一个无铬的集合看起来真的很愚蠢。

我想为仅绘制整个项目而不是项目的集合(ItemsControl/ListBox)创建一个虚拟化面板。例如:

在此处输入图像描述

我不希望显示第三个部分容器,除非有空间显示整个项目/容器。在示例中,由于空间不足,第三项被裁剪。

有什么建议么?我应该尝试重新发明轮子(建立我自己的VirtualizingWholeItemPanel)吗?

编辑

微软澄清说VirtualizingPanel.ScrollUnit根本不打算执行此功能。看来,它的用途与旧的 onVirtualizingPanel.ScrollUnit非常相似。CanContentScrollScrollViewer

0 投票
2 回答
7898 浏览

wpf - 是否可以覆盖 ItemsPresenter 以使用 Virtualizing StackPanel 而不是常规的堆栈面板?

背景

我有一个从 TreeView 继承的自定义控件,并被修改为以数据网格样式显示。我看到的问题是扩展树时的性能。这在我对 Tree Views 的研究中很常见。使用 WPF 性能工具检查后,我注意到 ItemsPresenter 类使用的是常规堆栈面板,而不是虚拟化堆栈面板。

在此处输入图像描述

这是使用 ScrollContentPresenter 的代码部分(如图所示)。

这是传入的模板。

问题

是否可以强制项目演示者使用虚拟化堆栈面板?

笔记

  • 我已经尝试将 ItemsPresenter 包装在 ScrollViewer 中,但这会产生不希望的结果(每行的滚动条)。
  • 我将选项 CanContentScroll = true 硬编码为测试,因为当它设置为 false 时这会禁用虚拟化。
  • 该控件已投入生产并在多个地方使用,因此此时我无法选择替换/重写/或对设计进行重大修改。如果可能的话,我只是想覆盖这一部分。

非常感谢任何建议或选项。

解决:

我通过将其添加到样式中来修改模板的样式,并将堆栈面板切换为虚拟化。

0 投票
1 回答
299 浏览

c# - 什么会导致虚拟化 ListView 有时会生成所有项目?

为清楚起见编辑:

我的应用程序中有 2 个 ListView。第一个包含一个List<KeyPair<String,List<Elements>>。列表中项目的显示被模板化为仅显示键(字符串)。当用户在此列表中选择一个项目 (SelectionChanged) 时,它会将我的第二个 ListView 的 ItemSource 更改为 Keypair 的 Value。

这被放置在列宽为 Auto 的 Grid 内。

Style SearchListStyle 仅包含一个显示 Key 的 TextBlock(因为它包含 KeyPairs)。ElementLV 是一个小型文本块,其中 Runs 绑定到我的元素的各种属性和 ToString 值。

这些可以显示在 SearchResults 列表视图中的列表可以包含大量元素(100k+)。我已将 IsVirtualizing 放在第二个列表视图上,而且大多数时候它的作用就像魅力一样。

但有时,我不能完全确定导致它的原因(可能是单击太快无法选择一个项目?)应用程序决定它必须生成列表中的所有项目(这显然不是想要的)......

有人可以指出我正确的方向吗?SearchResults 决定要求生成所有项目是否有原因?

它是否可以链接到项目的宽度和 SearchResults ListView,当测量时,试图测量它的所有项目?

0 投票
1 回答
526 浏览

windows-8 - 引用 VirtualizingStackPanel 中的项目

我正在玩“网格应用程序”,它是 VS11 提供的 C++ Metro 应用程序模板。主显示是在 VirtualizingStackPanel 中显示的项目集合:

实际项目使用 StandardStyles.xaml 中定义的 Standard250x250ItemTemplate 数据模板显示。其中一个显示元素是图形。

我试图了解如何引用特定项目,以便我可以在运行时更改图形。ScrollViewer 和 GridView 具有与之关联的对象,因此我可以访问这些对象,但我不知道如何从那里访问各个项目。

所有这些东西对我来说都是全新的,所以要温柔。:)

0 投票
0 回答
323 浏览

.net - 调整大小时 VirtualizingStackPanel 行为异常

我正在研究使用模式设置为“回收”的 VirtualizingStackPanel 的自定义控件,我遇到了以下问题:http: //i.imgur.com/XoarX.png

当我“玩”列宽度一段时间然后最大化窗口时,就会发生这种情况。我不知道是什么原因造成的。PrepareContainerForItemOverride 被调用,我检查了单元格宽度并且它是正确的,似乎包含单元格的 StackPanel 没有重新排列其内容,我不知道如何强制它这样做......

我知道我没有提供太多细节,但也许你们中的一些人有类似的问题,只是碰巧知道解决方案。

编辑: 相关部分的 XAML:

每行(简单控件,与 XAML 无关)都包含 CellPresenter,并且行堆叠到 VirtualizingStackPanel 中。您可以在 ItemsPanelTemplate 中看到的具有水平方向的 StackPanel 似乎没有更新其布局。

0 投票
1 回答
1384 浏览

wpf - WPF Listview 虚拟化模式在绑定时会出现问题

我创建了一个新类(从 listview 派生)。

此列表视图是视图的一部分,该视图具有视图模型。此视图模型有两个主要属性 - 1)myView(ICollectionView)...和 ​​isWritable(bool)。

每个列表视图项(列表视图内的行)都有一个控件模板,该模板显示一组控件。

其中少数控件的可见性由“isWritable”属性决定...通过 FindAncestor 方法。

问题是..当我们滚动这个列表视图时,一些使用“isWritable”属性来启用/禁用的控件被禁用,即使属性的值为“True”。

如果我删除回收,它工作正常......我认为这个问题是 - 因为它重用旧容器......绑定并没有完美地与 FindAncestor 发生。

如您所见,我在这里使用虚拟化......并且项目面板被回收。所以我认为当我们重用 itempanel 时,使用 FindAncestor 并没有像预期的那样发生数据绑定。

任何帮助,将不胜感激!

0 投票
1 回答
190 浏览

xaml - 如何使用 xaml 创建类似计算器的界面?

我希望使用 XAML 创建一个类似界面的计算器。它应该包含最多 1000 个按钮。我已经阅读了有关虚拟化堆栈面板的信息,但我不确定如何将它与列表框一起使用并与该列表进行数据绑定以获取内容. 你能帮我虚拟化堆栈面板的概念吗

0 投票
4 回答
1172 浏览

c# - VirtualizingStackPanel 和 TextWrapping 错误?视窗电话

我有一个奇怪的行为VirtualizingStackPanel。我有一个包含TextBlockwith的项目列表TextWrap="Wrap"。这是代码:

它工作得很好,但是如果我尝试非常快地滚动(在模拟器上使用鼠标,而不是使用鼠标)滚动会有一些滞后,HorizontallOffset有时可能计算错误,并且在底部以非常奇怪的结果结束(见图,右图演示正常行为)。

滚动错误

经过研究,我发现了这个问题VirtualizingStackPanelTextBlock.TextWrap="Wrap"如果我从这对夫妇中删除一个元素,所有的工作都正常。

但是我需要虚拟化,因为项目数量很大,并且TextWrap要正确显示文本。

所以我想自己实现虚拟化面板,请你指导我,如何做到这一点,或者如何解决当前的问题?

UPD:问题:
前两个图像ListBox已经(!)滚动到底部(不能再向下滚动),但元素放置不正确,正确放置显示在右侧图像上。仅当您滚动非常快时才会发生这种情况。

UPD2:感谢米兰阿加瓦尔。他在这里为我的问题提供了一个很好的案例。看来这确实是ListBox. 提供的解决方法不适合我的场景,因为我需要与ListBoxitem 内部的控件进行交互。现在我正在尝试捕获ManipulationCompleted事件并检查它是否是Inertial,如果是,则意味着滚动,我将焦点设置为页面:

PS感谢祝你好运;)