树视图上的 VirtualizingStackPanel 不是虚拟化

2024-04-27

我在这里遇到一个问题,我想在 TreeView 中显示一些项目,大约 100.000 个元素。 如果我使用默认的 WPF TreeView,一切似乎都可以工作,但如果我使用自定义 TreeView(目前只有 ItemsControl),虚拟化似乎不再工作。 在网上研究时,我尝试了一些解决方案,但似乎都不起作用...... 这是我的 xaml:

<Style TargetType="{x:Type my:MultiSelectionTreeView}">
    <Setter Property="TreeView.Background" Value="Transparent"/>
    <Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True"/>
    <Setter Property="VirtualizingStackPanel.VirtualizationMode" Value="Recycling"/>
    <Setter Property="TreeView.OverridesDefaultStyle" Value="True" />
    <Setter Property="ItemsControl.ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel IsItemsHost="True"/>
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="TreeView.Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type my:MultiSelectionTreeView}">
                <Border Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
                    <ScrollViewer Focusable="True" CanContentScroll="true" 
                                  Padding="4" 
                                  VerticalScrollBarVisibility="Auto">
                        <ItemsPresenter HorizontalAlignment="Stretch"/>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这些项目位于带有 DataBinding 的 ObservableCollection 中,所以这不应该是问题......但它是什么???

Greets,

Jürgen


VirtualizingStackPanel 有一些特殊的代码来查找 TreeView 和 TreeViewItem。另外,TreeViewItem 实现VirtualizingStackPanel.IProvideStackingSize,这是一个您无法实现的内部接口。

因此,如果您尝试复制 TreeView 中的项目的层次结构,那么您必须从 TreeView 派生才能使用虚拟化(而不是 ItemsControl)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树视图上的 VirtualizingStackPanel 不是虚拟化 的相关文章

  • 此上下文中仅支持实体类型、枚举类型或基本类型

    我目前正在开发一个搜索页面 我只需要返回主题的主题详细信息列表 其中包含存储在 int ST 中的所有主题标签 id 目前 ST null true ST Contains b ThemeTagID 行似乎给了我一个错误 附加信息 无法创建
  • 如何从头开始重复C程序并清理屏幕和第一个输入值?

    我是编程新手 我写了一个简单的程序 我想一次又一次地重复该程序 并且只有当用户想要退出时它才能退出 这是我的程序 include
  • Windows 控制台中的 C++ 按键输入

    我目前正在开发各种consoleWindows 中的游戏无法通过常规输入真正运行cin 我怎样才能 以简单的方式仅使用 MSVC 中提供的标准 Windows 库 让程序等待 特定 按键并返回按键 ID 它必须适用于包括箭头键在内的所有按键
  • 验证码怎么写?

    我正在开发一个注册表 我想放置验证码 我生成一个随机字符串 但如何将其转换为图像 否则我如何开发验证码或任何参考 谢谢 Try out 验证码 http recaptcha net plugins aspnet 或查看博客文章 使用 Asp
  • c++1y 模式下的 Clang >= 3.3 无法解析 标头

    我有一个项目可以在 g 4 8 1 和 c 11 模式下 clang gt 3 3 下正确编译和运行 然而 当我切换到实验时 std c 1y模式下 clang 3 3 但不是 g 在
  • 如何将文本框中删除的字符替换为0

    在winforms中 如何用零替换删除的字符 例如 文本框中为 12 45 如果我们删除小数点后 它应该变成12 00 同样的方法删除前面的000 45 默认值应为 000 00 Use a 蒙版文本框 http msdn microsof
  • 如何获得字符串的所有字谜

    我试图找到一个字符串的所有可能的字谜并仅使用递归将它们存储在数组中 我被困住了 这就是我所拥有的一切 int main const int MAX 10 string a ABCD string arr 10 permute arr a 0
  • C 中经过的时间

    include
  • 无效的跨线程访问问题

    我有两个 ViewModel 类 PersonViewModel 和 PersonSearchListViewModel PersonViewModel 实现的字段之一是通过 WCF 下载的个人资料图像 本地缓存在独立存储中 PersonS
  • 慢速 WPF 文本框

    我正在开发一个简单的串行数据查看器 它将用于观察传输到计算机串行端口之一的数据 我使用 C 和 WPF 编写了一个测试应用程序 它只是将最近读取的行放入文本块中 但是 它会跳过所有其他行 我的理论是 在 WPF 渲染窗口之前 新数据会被放入
  • 如何从子窗口中加载的用户控件按钮关闭子窗口?

    这是我的 ChildWindow xaml 代码 1
  • 如何检测机器是否加入域?

    如何检测计算机是否已加入 Active Directory 域 相对于工作组模式 如果没有必要的话 不要用 pinvoke 来愚弄 参考System DirectoryServices 然后调用 System DirectoryServic
  • GCC 和 -Wconversion

    让我们编译以下程序 int main uint16 t data 0 data uint16 t std round 3 14f return 0 with g Wconversion prog cpp 我们会得到warning conve
  • 使用来自不同线程的实时数据更新 QTableView 的最佳策略

    我的应用程序现在启动几个线程 如 5 10 个 来从不同源收集数据 它们与主 GUI 线程分离 因此我在 GUI 中感觉不到任何缓慢 并且我可以在后台线程工作时继续工作 一切都很棒 但现在我希望能够在我的主 GUI 中的 QTableVie
  • 如果键不是映射中的初始化键,STL map[key] 返回什么? [复制]

    这个问题在这里已经有答案了 这是一些示例代码 include
  • 在C中更改函数内的数组

    我正在学习 C 并且很困惑为什么在 main 中创建的数组不会在函数内部更改 我假设传递的数组是一个指针 并且更改指针应该更改数组 对吧 有人可以解释这种情况下发生了什么吗 谢谢你的帮助 int main int i length 10 i
  • 在源代码和预编译二进制文件之间切换

    我们的应用程序中有大量的库 库是用 C 或 C 编写的 平台 net Framework Windows 64 位 将所有内容编译为源代码需要花费大量时间 我们正在考虑切换到预构建的二进制文件 但我们仍然希望保留返回源代码的可能性 作为版本
  • 在 asp.net MVC 控制器中调用异步外部 Web 服务

    在 Asp net MVC 控制器 GET 方法 中 我调用外部 Web 服务 用于 IP 地理定位 返回 IP 位置的 json 数据 如何使调用异步 以便堆栈可以在等待服务响应时继续 当 GEO IP 请求完成后 我希望能够更新数据库
  • 使用 JSON.NET 反序列化一些 JSON

    我对 JSON 非常陌生 我需要解析 API 提供的一些内容 谷歌快速搜索出现了JSON NET http james newtonking com pages json net aspx 所以我现在尝试使用它将此 JSON 解析为列表对象
  • 如何在 MVC 5 中设置自定义 ClaimsPrincipal?

    我创建了一个自定义主体类 public class FacebookPrincipal ClaimsPrincipal public JObject Data get set 我想用它 当用户登录时 我尝试设置 var fbP new Fa

随机推荐

  • 如何在Python 2.7中访问ODB文件

    我想在 Python 中访问 ODB 文件 使用 LibreOffice Base 创建 并提取一个表以供进一步使用 ODB包含多个表 一种关系设计和多种表单 是否可以在不使用任何 SQL 的情况下实现这一目标 Edit 由于我自己解析这种
  • const QList 警告 = QList() << 0; gcc 4.7.2 的段错误

    因此 主题行中提到的代码会导致 Qt 4 8 3 和 gcc 4 7 2 出现分段错误 这是在 cpp 文件中的任何类 结构之外 并且与 gcc 4 4 一起使用 const QList
  • Cassandra 墓碑对多个查询与单个查询进行计数

    我有一个 cassandra 表定义如下 CREATE TABLE mytable colA text colB text timeCol timestamp colC text PRIMARY KEY colA colB timeCol
  • 如何在plotly dash应用程序中编写数学符号?

    我想在绘图破折号应用程序中绘制数学符号 例如 我尝试过这个 import dash import dash html components as html app dash Dash name app layout html Div chi
  • 如何可靠地检测实际安装的.NET 4.5版本?

    我的实际问题是我遇到了两个版本的 NET 4 5 完整设置 a possibly older one which is also available when downloading SQL Server Data Tools size 5
  • 如何在 servicestack.net 中实现身份验证

    我正在调查 servicestack net 但它的示例和文章似乎没有涵盖身份验证 这是由 servicestack net 处理的东西 如果是的话如何处理 我特别有兴趣实现对以下方面的支持 OAuth 因此能够检查原始请求并验证它 检索关
  • 构建方法调用

    尝试遵循本指南 https github com Readify Neo4jClient wiki cypher examples get all users by label https github com Readify Neo4jC
  • PouchDB 身份验证:创建新的 CouchDB 用户

    我使用 PouchDB 身份验证插件 我喜欢它 然而 我对注册过程有点困惑 也许我没有以正确的方式使用它 我用它在我的 CouchDB 数据库中创建新用户 但我不明白为什么它与特定数据库关联 由于我在 CouchDB 用户的特定数据库之前创
  • 未初始化的枚举变量值

    我使用 enum 声明新类型 DAY 然后从中声明两个变量 day1 和 day2 然后当我使用未初始化的值时 我应该看到 0 到 6 之间的值 因为 enumlist 中的值介于 0 到 6 之间 但我收到了这些值改为 858993460
  • 我们如何找到 C# 整数数组中的项目计数?

    我需要在 C 数组中查找类型为整数的项目计数 我的意思是 int intArray new int 10 int 0 34 int 1 65 int 2 98 intArray 的项目计数为 3 我在下面找到了 strArray 的代码 但
  • C#:模拟内存泄漏

    我想用c 编写以下代码 a 模拟内存泄漏的小型控制台应用程序 b 小型控制台应用程序 它将调用上述应用程序并立即释放它 模拟管理内存泄漏问题 换句话说 应用程序 b 将不断调用并释放应用程序 a 以模拟如何遏制 叛逆 内存泄漏应用程序 而不
  • 更新jqGrid中的数据

    我在这种情况下使用 jqGrid 网格从第一个 URL 获取 JSON 数据 如果 URL 返回正确的 JSON 网格会显示该数据 如果 URL 返回不正确的数据 则会触发 grid 的 loadError 事件 在这种情况下 我想将网格的
  • Android JSoup 示例

    我只是想知道是否有人有一个包含 JSoup 的工作实现的示例 Eclipse 项目 我试图用它从网站上获取信息 并在谷歌上到处搜索试图让它工作 但不能 如果有人可以提供帮助 我将非常感激 JSoup 真的很容易使用 看看 JSoup 食谱中
  • 将比其父级更宽的 div 居中,而不设置负左边距

    我有一个div里面有一个div 里面的 div 比它的父级宽 所以正常的过程 margin left auto margin right auto 生成一个内部 div 其中子级的左边缘与父级的左边缘对齐 当人们回答这个问题时 他们通常会采
  • Android 上的 iptables 1.4.11

    我已经从以下位置下载了 Android 内核源代码http source android com source building kernels html http source android com source building ke
  • 将 jbyteArray 转换为字符数组,然后打印到控制台

    我正在编写一个 JNI 程序 其中我的 cpp 文件获取 jbyteArray 并且我希望能够使用 printf 打印 jbyteArray 为此 我相信我必须将 jbyteArray 转换为字符数组 对于背景知识 我的 JNI 的 jav
  • 使最后一个动态添加的手风琴打开

    我正在尝试添加引导程序手风琴 https v4 alpha getbootstrap com components collapse accordion example以编程方式 以便每次单击 添加 按钮时 都会生成一个新的手风琴 并关闭前
  • 将文本文件与 C# 中的文本模式进行比较?

    我将文本文件与类似的模式进行了比较 它正在将整行写入日志 如下所示 insert into depdb fin quick code met 但我需要单独写这个depdb或者depdb fin quick code met 即 我只需要这个
  • 在下载的同时从 UnityWebRequest 获取数据?

    我有这段代码可以进行 REST 调用 public IEnumerator GetCooroutine string route string finalURL URL route UnityWebRequest www UnityWebR
  • 树视图上的 VirtualizingStackPanel 不是虚拟化

    我在这里遇到一个问题 我想在 TreeView 中显示一些项目 大约 100 000 个元素 如果我使用默认的 WPF TreeView 一切似乎都可以工作 但如果我使用自定义 TreeView 目前只有 ItemsControl 虚拟化似