如何通过重新定义的 ListBox 模板使用 UI 虚拟化

2023-12-12

我正在尝试使用 ListBox 作为包含多个项目的视图,当然,我需要在其中使用 UI 虚拟化。

问题是虚拟化仅在我以这种方式声明 ListBox 时才起作用:

<ListBox 
    ItemsSource="{Binding ItemsSource}" 
    VirtualizingStackPanel.IsVirtualizing="True"
    VirtualizingStackPanel.VirtualizationMode="Recycling">

    <ListBox.ItemTemplate>
        <DataTemplate>
            <views:SiteEntryView />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

但如果我尝试自定义它,它就不再虚拟化了:

<ListBox 
    ItemsSource="{Binding ItemsSource}" 
    VirtualizingStackPanel.IsVirtualizing="True"
    VirtualizingStackPanel.VirtualizationMode="Recycling">

    <ListBox.Template>
        <ControlTemplate>
            <ScrollViewer>
                <ItemsPresenter />
            </ScrollViewer>
        </ControlTemplate>
    </ListBox.Template>

    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>

    <ListBox.ItemTemplate>
        <DataTemplate>
            <views:SiteEntryView />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

据我发现,此示例包含的内容与 ListBox 默认包含的内容相同。但虚拟化不起作用。我在这里阅读了几篇文章和几个答案,但仍然无法弄清楚“一般方法” - 我必须设置、绑定、添加什么以及在哪里等才能使虚拟化与自定义模板一起工作?


两件事情:

更新你的PanelTemplate使用一个VirtualizingStackPanel并添加你的virtualization的选项ScrollViewer of the ControlTemplate.

<ListBox.Template>
    <ControlTemplate>
        <ScrollViewer VirtualizingStackPanel.IsVirtualizing="True"
                      VirtualizingStackPanel.VirtualizationMode="Recycling">
            <ItemsPresenter />
        </ScrollViewer>
    </ControlTemplate>
</ListBox.Template>

<ListBox.ItemsPanel>
    <ItemsPanelTemplate>
         <VirtualizingStackPanel />
    </ItemsPanelTemplate>
</ListBox.ItemsPanel>

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

如何通过重新定义的 ListBox 模板使用 UI 虚拟化 的相关文章

随机推荐

  • 在 null Laravel 5.4 上调用成员函数 connection()

    尝试编写一个单元测试 我需要执行 sql 查询 class UpdateThrowsTest extends TestCase protected bgame protected game id 95 public function set
  • 是否可以声明升序列表?

    我可以像这样制作升序整数列表 findall L between 1 5 L List 我知道我还可以使用以下方法生成值 length X 但我不认为我可以在 findall 中使用它 就像下面的循环一样 findall X length
  • 为什么 BackgroundWorker 不需要在 ProgressChanged 事件处理程序中调用?

    自从ProgressChanged事件处理程序是从某个地方引发的DoWork事件处理程序 不应该在异步操作线程上调用它们吗 DoWork也运行在 UI 线程上 而不是 UI 线程上 因此需要 Invoke 或BeginInvoke操纵控制
  • 为什么 kubernetes 需要有 2 个 coredns pod

    我安装了新的 kubernetes 单节点集群 并且看到 2 个 coredns pod 正在运行 其中一个失败了 不是这个问题的一部分 为什么他们是2个 有关 CoreDNS 的详细调整信息link CoreDNS 内存使用情况主要受集群
  • Python:找不到 os.listdir 文件[重复]

    这个问题在这里已经有答案了 我最近将配置文件移动到项目中的另一个文件夹 我尝试像这样加载 CONFIG PATH os path abspath os path dirname os path abspath file config def
  • for循环后全局变量的值不会改变

    我正在开发一个hadoop项目 我想找到某一天的客户 然后写出当天消费最多的客户 在我的减速器类中 由于某种原因 全局变量maxfor 循环后不会改变它的值 EDIT我想找到某一天消费最多的顾客 我已经设法在我想要的日期找到客户 但我在减速
  • 如何将第 3 方 JAR 添加到 jGRASP 中的编译时类路径?

    我需要做什么才能成功导入ij包裹 我收到错误 ITCN java 1 package ij does not exist 进口产品为 import ij import ij io import ij gui import ij proces
  • Service Worker 将 API 调用中的文件添加到预缓存中

    使我的应用程序能够离线运行 在安装过程中 服务人员应该 从异步 API 获取 URL 列表 重新格式化响应 将响应中的所有 URL 添加到预缓存 对于此任务 我将 Google Workbox 与 Webpack 结合使用 问题 虽然服务工
  • 查找并计算网络中隔离和半隔离节点的数量

    我正在与经历了许多的网络合作扰乱事件 因此 许多节点会因给定事件而发生故障 因此 左侧图像与右侧图像之间存在过渡 我的问题 我怎样才能找到不连通的子图 即使它们只包含 1 个节点 我的目的是count他们并渲染失败了 因为在我的研究中 这适
  • 在 Gitahead 中的 origin 上也创建标签

    当我在本地存储库上创建标签时 它是在我的本地存储库上创建的 我不知道如何推送位于 GitHub 上的源 我可以通过命令行将其推送到远程存储库 git push origin v0 3 0 但我想知道是否有办法通过 Gitahead 的 GU
  • 使用单个副本时,Kubernetes 部署不执行滚动更新

    我修改了部署配置 生产 yaml 更改了容器映像值 然后我运行了这个 kubectl replace f production yaml 发生这种情况时 我的服务似乎没有响应 此外 kubectl get pods wordpress 21
  • Pyinstaller 未加载 DLL

    为我的 python 脚本构建 exe 后dungeon py 我收到错误时PyBearLibTerminal py 我的程序导入的脚本 尝试加载 DLLBearLibTerminal dll 该脚本运行正常 只是运行导致错误的可执行文件
  • Google 地图 - 平移和缩放区域 - 放大或平移时标记不出现

    我正在标记的服务器端实现一些基于边界的集群 以显示在我的谷歌地图上 我正在做的是 我有一个函数 每次移动 平移或缩放地图时都会调用该函数 该函数获取地图的边界并进行 ajax 调用 服务器端脚本又运行一个简单的 sql 查询来检索标记并对它
  • Android:自动选择调试/发布 Maps v2 api 密钥?

    我在我的项目中使用 Google Maps v2 API 在 Google 地图 v2 中 调试 发布 API 密钥定义在AndroidManifest xml 我见过the link但地图键是在 xml 布局文件中定义的 而不是在Andr
  • 自签名小程序可以访问本地文件系统吗

    您好 我已经创建了一个自签名小程序 但无法访问本地文件系统 我该怎么办 你需要将你的IO代码包装在里面特权动作 通常 您需要使用测试证书对小程序进行签名 用户将看到警告 并且在加载小程序时必须接受证书 那么您需要将代码包装在 Privili
  • Python:binned_statistic_2d 均值计算忽略数据中的 NaN

    我在用scipy stats binned statistic 2d通过查找每个箱内点的平均值 将不规则数据分箱到统一网格上 x y np meshgrid sort np random uniform 0 1 100 sort np ra
  • src绝对路径问题

    我有一个图像C wamp www site img我尝试将其显示在页面中 img src 但它不起作用 该文件实际上在那里 如果我尝试使用相对路径引用它 我就会得到图片 img src img mypicture jpg 错误在哪里 我错过
  • 在 Windows 中从命令行运行 python 脚本

    我正在尝试跑步蛇食 分析一个Python项目 我使用的是 Windows 机器 到目前为止我已经能够弄清楚如何 安装 Tortoise for Mercurial 以从站点下载 SnakeFood 代码 设置 Windows 路径以从命令提
  • Jquery 自动完成底部附加链接

    I am using jQuery auto complete plugin in my web project I want to show 3 element and after that i want to append see al
  • 如何通过重新定义的 ListBox 模板使用 UI 虚拟化

    我正在尝试使用 ListBox 作为包含多个项目的视图 当然 我需要在其中使用 UI 虚拟化 问题是虚拟化仅在我以这种方式声明 ListBox 时才起作用