【发布时间】:2015-11-13 20:58:27
【问题描述】:
我正在尝试创建一个索引,如下面的屏幕截图所示。这是通过简单地以编程方式将 texboxes 添加到滚动查看器内的水平和垂直堆栈面板来完成的。但是这个解决方案非常慢。绑定大约需要 5 秒钟。
因此我测试了将包含整个数据的List<> 直接绑定到ListBox。我尝试了ItemTemplates 的各种组合,但即使使用VirtualizingPanel.IsVirtualizing="True",我也无法加快绑定速度。只有一个简单的ListBox 没有任何分组尝试来完成这项工作。
这是我用于所有测试的唯一 XML 部分:
<StackPanel Orientation="Horizontal" Margin="0,0,0,5">
<TextBlock Text="{Binding Name}" Style="{DynamicResource HoverUnderlineStyle}" MouseLeftButtonUp="...">
<TextBlock.ContextMenu>
<ContextMenu>
<!-- ... -->
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat=" ({0})">
<Binding Path="Count"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
如果有人能帮助我,那就太好了。 提前致谢!
【问题讨论】:
-
哪个控件应该包含文本?文本块还是文本框? (您编写了 TextBox,但在屏幕截图中它们看起来像文本块)。您是否希望这些项目可以选择?
-
哦对不起这个错误!一个 TextBlock,是的,这些项目应该是可选择的。
-
真正的问题是什么,您是否要求性能更好的解决方案?
-
@tron 您要显示的数据很多,因此需要绘制很多控件。如此多的数据,人脑无法一次处理所有数据。为什么不通过搜索让用户更容易找到某人,或者在折叠状态下开始组。我不知道,不会导致信息过载的东西。
-
此外,样式会对渲染时间产生重大影响。最后,您还可以查看如何使用 HeaderedItemsControl 或自定义 ItemsControl,具体取决于您是否需要可点击或可选择的项目(存在差异)。