我目前正在開發一個應用程序,它根據時間軸上的時間戳顯示數據項。下面的截圖給你一個想法:如何有效地實現ScrollViewer背景網格?
Screenshot http://www.antiserum.ch/Screenshot.png
的時間表包含每十毫秒指標線。它使用Canvas將數據項呈現在正確的位置,並使用StackPanel顯示索引線。
你在sceenshot中看到的就是我想要達到的目標。但是,要顯示索引行,我正在填充TimeSpan對象列表,每個對象增加10ms,以獲取完整的數據集持續時間。該列表顯示在具有項目數據模板的ItemsControl中,該模板繪製白線,黑框和文本。
正如你可以想象的那樣,從性能的角度來看,這可能是最糟糕的方法,因爲ItemsControl僅包含1000個元素,只有10秒鐘的數據。
所以我的問題是,我如何有效地繪製索引標記?
我已經考慮過使用VirtualizingStackPanel來顯示TimeSpan項目。這不是一個選項,因爲ScrollViewer不直接包含索引列表。看來虛擬化在這種情況下不起作用。
爲了清楚起見,這裏是我的XAML代碼片段(I除去模板和造型代碼):
<ScrollViewer x:Name="timelineScroller">
<Grid>
<ItemsControl x:Name="IndexMarkers" ItemsSource="{Binding IndexMarkers}" />
<ItemsControl x:Name="TimelineList" ItemsSource="{Binding Lines}" />
</Grid>
</ScrollViewer>
一種可能的解決方案可以是子類的ScrollViewer並繪製索引行和文字的背景渲染時的ScrollViewer。這應該是有效的,因爲它只能渲染實際可見的線條。但是,我沒有找到關於如何實現這種渲染定製的信息。
任何想法表示讚賞。
問候, 丹尼爾
問題是有問題的列表是使用VirtualizingStackPanel實現的,但VSP無法虛擬化,因爲它不是相應ScrollViewer的直接子節點。因此,即使我自己實施,虛擬化也不會發生。 – theDmi 2011-04-13 15:12:38