【问题标题】:how to find node in WPF treeview?如何在 WPF 树视图中查找节点?
【发布时间】:2013-11-02 08:16:16
【问题描述】:

我使用包含许多项目的 WPF 树视图,例如 1000。树视图的加载速度会很慢,所以我遵循了下一个链接中的微软建议:

http://msdn.microsoft.com/en-us/library/cc716882.aspx

我将 VirtualizingStackPanel.IsVirtualizing 设置为“True”,并将 VirtualizingStackPanel.VirtualizationMode 设置为“Recycling”。现在treeview的性能很好,但是出现了一个问题。

当我想在树视图中找到可见节点之外的一个节点时,TreeViewItem 将为空。例如,当树视图位于底部时,我想在树视图的顶部找到一个节点。在搜索节点并显示需要显示的节点后,我希望树视图自动滚动到顶部。我怎么能这样做?

衷心感谢您的帮助!

【问题讨论】:

    标签: c# wpf treeview


    【解决方案1】:

    由于您的 TreeView 的 Virtualizationon,因此不会为不可见的对象生成 itemcontainers (treeViewItem)。这就是为什么您的 treeviewItem 为 null。

    如果您想获取 treeViewItem,您需要以某种方式为底层对象生成容器,您可以通过调用 BringIntoView 方法来完成。

    详细的解释可以在MSDN找到示例。

    【讨论】:

      【解决方案2】:

      实际上 VirtualizingStackPanel 不会持续加载元素。 相反,它重用现有元素并替换它们后面的 DataContext。 例如,如果您有一个包含 1000 个项目的 VirtualizingStackPanel, 一次只有 20 个可见,但实际上它为滚动缓冲区渲染了更多的项目。

      例如,在您的情况下,您会看到 20 个项目和 5 个额外项目用于滚动缓冲区。 当您滚动时,那些 20+5 个控件后面的 DataContext 会发生变化, 但实际控件本身永远不会被替换。

      如果你在 TreeViewItem #1 中输入 Value,并且 TreeViewItem.Value 没有绑定到任何东西,那么 Value将始终显示,因为控件正在被重用。 如果你将 TreeViewItem.Value 绑定到一个值,那么 DataContext 将会改变 当您滚动时,它将替换显示的 Value

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多