问题标签 [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 投票
2 回答
2000 浏览

c# - ControlTemplate中点击ListBoxItem时需要触发事件

我用 ControlTemplate 覆盖了我的 ListBoxItems 的样式,但是这样做,我丢失了我的 ListBoxItem 单击事件的处理程序。我发现一篇文章有​​助于说我需要在 ControlTemplate 中添加一个事件处理程序,但我不知道该怎么做。

非常感谢您对此的任何帮助和指导!

0 投票
1 回答
3538 浏览

wpf - VirtualizingStackPanel 不工作

我有以下列表框:

这个列表框应该包含大约 1000 个项目,但很复杂。我希望它与 VirtualizingStackPanel 一起使用,因此我将可视化 XAML 配置设置为:

我的问题是我认为它不起作用-首先-加载〜700个项目需要很长时间,其次,当我在控件构造函数上遇到断点时-我可以看到它被调用了700次:

我在 Console.WriteLine("Hi") 上断点,我可以看到静态计数器达到 700。

因此,尽管这是一种虚拟模式,但基本上正在创建 UIElement。

我误解了虚拟化模式,还是我做错了什么?

0 投票
1 回答
905 浏览

wpf - wpf - HierarchicalDataTemplate、VirtualizingStackPanel、窗口调整大小(最大化)

我在使用 HierarchicalDataTemplate 和 VirtualizingStackPanel 的 wpf 树视图时遇到问题。使用下面提供的代码,我运行应用程序并展开所有树视图项。

http://img227.imageshack.us/img227/3536/wpftv03.png

然后我将视口设置为“小”,以便虚拟化项目。我滚动到底部并选择最后一项。

(抱歉没有足够的代表发布多个链接......哈哈)

http://img291.imageshack.us/img291/9020/wpftv01.png

然后我最大化窗口:

http://img706.imageshack.us/img706/607/wpftv02.png

似乎在(但不限于)最大化时,并不是所有的树视图项都被实现了。我很难过问题可能是什么。任何帮助,将不胜感激!:D

(当您“停靠”应用程序以填充一半屏幕时,这也会在 win7 中发生)

应用程序.xaml

主窗口.xaml

主窗口.xaml.cs

0 投票
1 回答
911 浏览

wpf - WPF - VirtualizingStackPanel 为 ListView 创建项目时需要一个事件

有什么方法可以判断何时为 ListView 制作容器?

详细解释我到目前为止所做的事情

我有一个 ListView 控件,它的其中一个列中有一个 DataTemplate,其中包含一个 CheckBox 控件。我已经弄清楚如何使用 ListView 绑定到的对象动态访问 CheckBox。

问题是,每当我滚动得太远或对列进行排序时,复选框都会“重置”(变为未选中)。我发现这是因为 VirtualizingStackPanel 只为那些可见(或几乎可见)的 ListViewItems 吐出容器。而且因为 CheckBox 位于 XAML 中定义的 DataTemplate 内,所以每次它消失时都会被丢弃或当列表排序时。

我通过创建一个单独的复选框列表并使用实际的复选框“单击”事件来更改列表中相应复选框的状态来解决这个问题。然后做了一个小方法来更改所有可见复选框的状态用户滚动...因此它看起来应该首先具有。

除非我对列进行排序。我尝试在它对一列进行排序后立即重新执行 CheckBoxes(就像以前一样),但它没有用。我最好的猜测是它不会在我排序后立即制作容器。

有什么方法可以判断何时为 ListView 制作容器?

0 投票
1 回答
986 浏览

wpf - VirtualizingStackPanel 的缺点是什么?

VirtualizingStackPanel 的主要缺点是什么?如果它没有,那么为什么不将它作为 ItemsControl 中的默认面板行为/模板?

0 投票
1 回答
4161 浏览

wpf - 覆盖 ScrollViewer 的默认控件模板时,VirtualizingStackPanel 停止工作

我有一个列表框,里面有很多渲染成本很高的项目。然而,VirtualizingStackPanel 仅通过渲染可见项来处理这一点。我想覆盖 ScrollViewer 的控件模板,因为默认的在水平和垂直滚动条之间有灰色矩形。我刚刚复制了微软提供的一个(ScrollViewer ControlTemplate Example),它没有灰色矩形问题。

然而,这个控制模板通过给 VirtualizingStackPanel 无限的高度来禁用虚拟化。这意味着 VirtualizingStackPanel 将呈现所有项目,因为它认为所有项目都是可见的。

在下面的演示代码中,我在列表框中显示了 10000 个项目。我通过比较运行它与 ScrollViewer 样式和没有它来验证问题。有了它,演示运行非常缓慢,调整大小需要几秒钟。如果没有样式,它会非常快。我输出了一些关于 VirtualizingStackPanel 的信息来证明我的观点:

没有 ScrollViewer 样式(注释掉 XAML 中的样式):

ViewportHeight: 8
ExtentHeight: 10000
ActualHeight: 245
IsVirtualizing: True
VirtualizationMode: Standard

使用 ScrollViewer 样式:

ViewportHeight: 0
ExtentHeight: 0
ActualHeight: 272766.666666707
IsVirtualizing: True
VirtualizationMode: Standard

知道如何为不与虚拟化混淆的 ScrollViewer 编写控制模板吗?

XAML:

后面的代码:

0 投票
1 回答
9247 浏览

wpf - VirtualizingStackPanel 中的 VirtualizationMode 属性的回收/标准之间的实际区别是什么?

VirtualizingStackPanel.VirtualizationMode = Recycling/Standard 中实际发生了什么?

0 投票
1 回答
399 浏览

wpf - UI 虚拟化列表框内的 WPF 验证

我需要在我正在开发的 WPF 应用程序中进行某种数据验证

据我所知,当你添加ValidatesOnDataErrors=True到 Binding 时,每次 Binding 被解析(可能是每次值变化时,也可能是失去焦点时),Binding 引擎检查绑定源,通过IDataErrorInfo,访问接口,找出是否有错误。

听起来不错,只有一个警告。为了验证数据,需要对其进行渲染。如果您碰巧ObservableCollection将该实体中的一个绑定到ListBoxwith VirtualizingStackPanel.IsVirtualizing=True,则仅验证呈现的项目。由于大多数项目都在视口之外,因此它们不会被渲染。

如何强制验证每个项目?删除 UI 虚拟化不是一种选择。

0 投票
1 回答
2628 浏览

windows-phone-7 - 向列表框的滚动查看器添加标题并保留 virtualizingStackPanel (wp7)

我想在我的 ListBoxes 中添加一个标题,我使用模板来做到这一点。问题是,如果我扩展 ListBox 的模板,似乎列表框的 virtualizingstackpanel 不再按预期工作:它会在我滚动之前加载所有内容。

我在 stackoverflow 中发现了一些类似的相关问题(VirtualizingStackPanel 在覆盖 ScrollViewer 的默认控件模板时停止工作),但是那里给出的解决方案不能应用于 WP7:我找不到滚动查看器的名为“CanContentScroll”的属性。

我的代码

0 投票
1 回答
6341 浏览

wpf - 在 WPF 中正确使用 VirtualizingStackPanel

有人可以告诉我如何在 WPF 中正确使用 VirtualizingStackPanel 吗?我已经在我的 ItemsPanelTemplate 中为我的 ItemsControl 设置了一个 VirtualizingStackPanel,并将其设置为我的 ItemsHost,但是当我在我的项目控件上注册 CleanUpVirtualizedItem 附加事件的侦听器时,没有任何反应。我没有看到该事件被调用。我也没有看到我的数据模板中的自定义控件上的任何 Unloaded 事件被调用,这向我表明没有实际的虚拟化正在进行。任何帮助将非常感激。