0

我需要一个 TreeListView,并在 TreeView 中添加了一个列。此外,应该应用 UI 虚拟化。

关联

因此,参考上面链接中的答案,我使用了应用 UI 虚拟化的 TreeListView。(您可以通过复制并粘贴答案的代码来创建示例。)但是,存在一个问题,即扩展按钮的布局会影响每行的所有列。

<local:TreeListView ItemsSource="{Binding Nodes}" VirtualizingPanel.IsVirtualizing="True">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}"/>
    </TreeView.ItemTemplate>
    <local:TreeListView.Columns>
        <GridViewColumn Header="Test" Width="150">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <DockPanel>
                        <TextBlock Text="{Binding Data}"/>
                    </DockPanel>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
        <GridViewColumn Header="Test 2" Width="150">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <DockPanel>
                        <TextBlock Text="{Binding Data2}"/>
                    </DockPanel>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
    </local:TreeListView.Columns>
</local:TreeListView>

当然布局问题可以通过上面代码中第一个GridViewColumn的Template部分添加Expander Button来解决。但是,这样做会自动禁用 UI 虚拟化。(添加10000多个集合元素后,可以通过运行程序测试是否开启UI虚拟化。父节点双击展开子节点、滚动、窗口大小调整等)

如何在保持 UI 虚拟化的同时仅将 TreeListView 的 Expander 应用于第一列?UI 虚拟化似乎在各种情况下被自动禁用。

4

0 回答 0