我需要一个 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 虚拟化似乎在各种情况下被自动禁用。