6
與ItemsControl的工作我試圖創造相當大的TextBlocks的滾動列表。我想在那裏有一個垂直滾動條來顯示它們,如果它們溢出一定的大小,我希望它們顯示一個省略號。實際上我所有的工作都很好。獲取UI虛擬化在Silverlight
我有以下的Silverlight XAML:
<Grid x:Name="LayoutRoot" MaxWidth="500" MinWidth="100"
MaxHeight="500" MinHeight="100">
<Grid.DataContext>
<app:MainPageViewModel/>
</Grid.DataContext>
<ScrollViewer>
<ItemsControl ItemsSource="{Binding TextItems}" Margin="0,20,0,20">
<ItemsControl.ItemTemplate><DataTemplate>
<Border MaxHeight="175" Margin="0,0,0,18" CornerRadius="5">
<TextBlock Margin="2" TextTrimming="WordEllipsis"
TextWrapping="Wrap" Text="{Binding}"/>
</Border>
</DataTemplate></ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
我的問題是,這種佈局不使用虛擬化的用戶界面,例如用VirtualizingStackPanel。所以它很慢。將UI虛擬化引入此佈局的最佳方式是什麼?我嘗試了大約六種不同的方式,沒有什麼能解決所有問題。
我設法得到這個工作在ListBox,因爲它似乎支持虛擬化的開箱。但是,我更喜歡使用ItemsControl,因爲我不希望這些東西是可選的,我不想要與ListBox一起出現的樣式。
這在Silverlight 4
這就像一個魅力史蒂夫。所以,你的解決方案,我試圖做的主要區別是,你用ItemsControl.Template在ScrollViewer中添加,而我只是想放的ScrollViewer上的控制之外。你能解釋爲什麼你的工作原理以及我試圖做的不是嗎?這可能會幫助我更好地理解解決方案。 – RationalGeek 2010-08-08 18:56:40
太棒了,很高興它爲你工作。基本上會發生的是,如果您將一個ScrollViewer放在ItemsControl的外部,那麼佈局引擎將呈現整個ItemsControl - 它將爲控件中的所有項目生成項容器。 ScrollViewer只是將視圖限制到ItemsControl的一小部分,但是具有所有項目的整個ItemsControl都存在於內存中。第二種方法,把ScrollViewer中的模板中給出的ItemsControl限制它創建項目的集裝箱數量的能力 - 這隻會造成足以填滿可用空間。 – 2010-08-08 19:38:05
有道理。再次感謝! – RationalGeek 2010-08-08 23:55:02