如何有效地实现ScrollViewer背景网格?
|
我目前正在开发一个应用程序,该应用程序根据时间轴上的时间戳显示数据项。以下屏幕截图为您提供了一个想法:
(来源:antiserum.ch)
时间线每十毫秒包含索引线。它使用Canvas在正确的位置呈现数据项,并使用StackPanel显示索引线。
您在场景中看到的正是我想要实现的目标。但是,为了显示索引线,我目前正在填充一个TimeSpan对象的列表,每个对象增加10ms,以获取完整的数据集持续时间。该列表将显示在ItemsItem控件中,并带有一个Items数据模板,该模板绘制一条白线,一个黑框和文本。
可以想象,从性能的角度来看,这可能是最糟糕的方法,因为ItemsControl仅在十秒钟的数据中就已经包含1000个元素。
所以我的问题是,如何有效地绘制索引标记?
我已经考虑过使用VirtualizingStackPanel显示TimeSpan项。这不是一个选项,因为ScrollViewer不直接包含索引列表。在这种情况下,虚拟化似乎不起作用。
为了澄清起见,这是我的xaml代码的片段(我删除了模板和样式代码):
<ScrollViewer x:Name=\"timelineScroller\">
<Grid>
<ItemsControl x:Name=\"IndexMarkers\" ItemsSource=\"{Binding IndexMarkers}\" />
<ItemsControl x:Name=\"TimelineList\" ItemsSource=\"{Binding Lines}\" />
</Grid>
</ScrollViewer>
一种可能的解决方案是在渲染时将ScrollViewer子类化并在ScrollViewer的背景上绘制索引线和文本。这应该是有效的,因为它只能渲染实际可见的线。但是,我没有找到有关如何实现这种渲染自定义的信息。
任何想法表示赞赏。
问候,
丹尼尔
没有找到相关结果
已邀请:
2 个回复
傻寺俊擒
抹持奠糙驰