问题标签 [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 回答
1388 浏览

silverlight - Silverlight 有 VirtualizingStackPanel 吗?

Silverlight 有VirtualizingStackPanel吗?如果没有内置类型,是否有任何第三方控件可以实现这一点?

0 投票
2 回答
15094 浏览

wpf - WPF中的stackpanel和virtualizingstackpanel有什么区别?

WPF中的stackpanel和virtualizingstackpanel有什么区别?

0 投票
2 回答
1880 浏览

wpf - 将嵌套容器(virtualizingstackpanel)虚拟化到 WPF 中的单个父滚动条

我已经把自己编码成一个泡菜。我正在编写一个自定义 WPF 控件,该控件类似于此 MSDN 文章 以及网络上的许多其他地方中TreeListView 描述的内容。在这一点上,这个东西的很大一部分是定制的,它很好地满足了我的目标,除了在虚拟化方面。我的覆盖和模板都使用s 来呈现它们的项目,并且我已经验证所有这些都按预期创建。虚拟化在根级项目上正常工作(只有当前可见的那些 UI 元素被煮熟),并且TreeViewTreeViewItemVirtualizingStackPanelScrollViewerTreeViewstuff 负责不为折叠节点生成元素。扩展节点时会出现问题——所有元素都是为节点中的每个子节点制作的,即使是屏幕外的数千个元素。

在我看来,我所需要做的就是以某种方式将内部嵌套VirtualizingStackPanels 的 scrollowner 属性设置为默认情况下根级别 VSP 连接到的相同主滚动视图,但我在这里阅读了 MSFT 海报说这不会工作。

不幸的是,如果没有虚拟化发生,这件事就像泥巴一样慢,所以我需要想出某种解决方案。任何建议将不胜感激。

0 投票
3 回答
13578 浏览

wpf - VirtualizingStackPanel + MVVM + 多选

我已经实现了一种类似于这篇文章中描述的选择模式,使用 ViewModel 来存储 IsSelected 值,并将其绑定ListViewItem.IsSelected到 ViewModel IsSelected:

它通常有效,但我遇到了一个严重的问题。通过使用 aVirtualizingStackPanel作为列表视图中的面板,只会创建可见ListViewItem的。如果我使用“Ctrl+A”选择所有项目,或者通过在第一个项目上使用“Shift+Ctrl+End”等快捷键组合,所有项目都会被选中,但对于不可见项目,ViewModel 不会获得其 IsSelected设置为真。这是合乎逻辑的,因为如果ListViewItem没有创建,绑定将无法工作。

有没有人遇到过同样的问题,并找到了解决方案(除了不使用 a VirtualizingStackPanel)?

0 投票
1 回答
12554 浏览

wpf - ItemsControl、VirtualizingStackPanel 和 ScrollViewer 高度

我想使用 ItemsControl 显示重要的项目列表。

我使用 ItemsControl 的原因是 DataTemplate 在我正在处理的应用程序中要复杂得多:提供的示例代码仅反映了我遇到的大小问题。

我想 :

  • 要虚拟化的 ItemsControl,因为要显示的项目很多
  • 它的大小自动扩展到其父容器(网格)

后面的代码是:

当我将 ScrollViewer 的高度强制为 400 像素时,ItemsControl 虚拟化按我的预期工作:ItemsControl 非常快速地显示列表,无论它包含多少项目。

但是,如果我删除 Height="400px",列表将扩展其高度以显示整个列表,而不管其父容器高度。更糟糕的是:它出现在它的容器后面。

在 ItemsControl 周围放置一个滚动查看器可以提供预期的视觉效果,但是虚拟化消失了,并且列表需要花费太多时间来显示。

如何实现 ItemsControl 的自动高度扩展和虚拟化?

0 投票
3 回答
21662 浏览

wpf - WPF 中的 ListBox、VirtualizingStackPanel 和平滑滚动

我有一个ListBox可能有很多行模板化数据库记录,包括一个Image绑定到一个ObservableCollection<MyItem>. 有时收藏品可以容纳数千件物品。

性能很棒,但滚动是默认的跳跃行为。我希望它有平滑滚动,所以我取消选中ScrollViewer.CanContentScroll.

现在我可以平滑滚动了,但性能却很糟糕:数据是在单独的线程中检索的,线程很快完成,但结果需要 10-20 秒才能显示在ListBox. 我认为这是因为取消选中ScrollViewer.CanContentScroll会将底层更改VirtualizingStackPanel为常规StackPanel,因此它会在显示结果之前加载整个集合。

所以我的问题是:如何在不牺牲VirtualizingStackPanel行为和性能的情况下保持平滑滚动?

0 投票
1 回答
3239 浏览

wpf - 更改焦点和滚动时,带有 IsVirtualizing="true" 的 WPF TreeView 跳转

我做了一个简单的例子来重现我在使用TreeView. 如果我在 中选择一个项目TreeView,向下滚动,更改Focus,然后在TreeView再次选择一个项目,列表开始跳来跳去。

这只发生在我有VirtualizingStackPanel.IsVirtualizing="True". 这是一个已知问题吗?有解决办法吗?

所以要重现:

  1. 在列表中选择项目 1。
  2. 向下滚动到列表底部
  3. 单击顶部的文本框。
  4. 在列表中选择项目 30

我正在使用 .Net 3.5 SP1,我已经在 64 位 XP 和 Vista 上尝试过。我还没有在其他环境中尝试过。

更新: 我已经在 .Net 4.0 Beta 中进行了测试,但没有出现问题。某处有修补程序吗?


任何帮助将非常感激!!!

0 投票
3 回答
58457 浏览

wpf - 虚拟化 ItemsControl?

我有一个ItemsControl包含我想虚拟化的数据列表,但VirtualizingStackPanel.IsVirtualizing="True"似乎不适用于ItemsControl.

真的是这样,还是有另一种我不知道的方法?

为了测试我一直在使用以下代码块:

如果我将 更改ItemsControl为 a ListBox,我可以看到该Initialized事件只运行了几次(巨大的边距只是让我只需要浏览几条记录),但是ItemsControl每个项目都被初始化。

我尝试将其设置ItemsControlPanelTemplate为 aVirtualizingStackPanel但这似乎没有帮助。

0 投票
2 回答
956 浏览

wpf - 如何在树视图(WPF)中获取面板

如何获得在一个内使用的面板TreeView?我读过默认情况下为此TreeView使用 a VirtualizingStackPanel。当我查看TreeView模板时,我看到的只是 <ItemsPresenter />,它似乎隐藏了使用哪个面板的详细信息。

可能的解决方案:

1)在树视图实例(“tv”)上,从代码中执行以下操作:tv.ItemsPanel。

问题是,这不会返回一个面板,而是一个 ItemsPanelTemplate(“获取或设置定义控制项目布局的面板的模板”)。

2) 制作一个 TreeView 模板,用您自己的 ItemsControl.ItemsPanel 显式替换 <ItemsPresenter />。无论如何,我提供了一个特殊的模板,所以这在我的场景中很好。然后为您放置在该模板中的面板指定部件名称,并从代码中获取该部件(即面板)。这有什么问题吗?见下文。

(我使用的是从 TreeView 派生的名为 VirtualTreeView 的控件,如下所示):

[为了能见度,我把这里所有的杂物都去掉了……]

这样做的问题是:这会立即覆盖任何 TreeView 布局机制。实际上,即使您有 TreeViewItems 填充树,您也会得到一个空白屏幕。好吧,我想要掌握面板的原因是参与MeaureOverride,但没有深入了解所有这些,我当然不想重写如何布局树视图的书。即,执行此步骤#2 的方式似乎使甚至首先使用 TreeView 的点无效。

抱歉,如果这里有一些混乱,感谢您提供的任何帮助。

0 投票
2 回答
731 浏览

c# - 使用按钮滚动 ListBox 的 VirtualizingStackPanel

我有一个列表框,一次水平显示 5 个项目。我想实现一个“上一个”和“下一个”按钮,单击该按钮将显示上一组 5 个或下一组 5 个项目。我没有显示水平滚动条,因为我不希望用户使用它来导航。

是否已经实现了一些功能以便我可以做到这一点,或者我是否需要编写代码来计算我在按钮的点击事件中显示的项目等?

提前致谢!