我想將我在WPF中編寫的控件轉換爲Windows Phone的Silverlight。我學到了很多東西,並對這兩個版本進行了相當多的改進,但我似乎無法將ScrollViewer從Silverlight版本的ListBox中移出。這似乎從一開始就非常簡單:列表框兒童數爲0
ScrollViewer s = VisualTreeHelper.GetChild(List, 0) as ScrollViewer;
然而,當我到達這條線,我得到一個IndexOutOfRangeException--顯然,根據VisualTreeHelper,我的列表框有沒有視覺的孩子。
因爲我感覺這是一個特殊的情況下,這是我的ListBox的XAML聲明:
<ListBox x:Name="List" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
ItemsSource="{Binding ItemsSource, ElementName=SnapListControl}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.Style>
<Style TargetType="ListBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBox">
<ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
<VirtualizingStackPanel Orientation="Horizontal" IsItemsHost="True"
Margin="{Binding ActualWidth, ElementName=LayoutRoot, Converter={StaticResource Hc}}">
</VirtualizingStackPanel>
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.Style>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="RenderTransformOrigin">
<Setter.Value>
<Point X="0.5" Y="0.5"/>
</Setter.Value>
</Setter>
<Setter Property="Padding" Value="0"/>
<!--<Setter Property="ContentTemplate" Value="{Binding ItemContentTemplate, ElementName=SnapListControl}"/>-->
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
我不得不註釋掉的ContentTemplate綁定,因爲很明顯這是在Silverlight只讀屬性?當我完成清理時,我將不得不進行更多的調查。
我無法從谷歌搜索這個找到很多,大多數人似乎使用上述方法取得了一些成功。它當然適用於WPF。
啊,我不認爲這一切必然是我想做的事情(比如,我不想隱瞞什麼,我想獲得對操控到的ScrollViewer參考它的滾動值),但我相信你確定了主要問題,這是我如何更改列表框的ItemsPanel。我記得使用你之前展示的方法;我不確定爲什麼我這次沒有這樣做。我將在更改後報告。 – 2012-08-10 14:35:51
好吧,它似乎已經工作 - 或者至少它部署了,儘管它不像WPF中那樣工作,但這是我可以繼續診斷的東西。您的更改工作得很好。我遇到的主要問題之一是我的StackPanel上仍然有「IsItemsHost」屬性,這在Silverlight中不存在...由於某些原因,Intellisense沒有收到它,所以我得到了「未指定的錯誤」異常令人困惑。謝謝你的幫助。 – 2012-08-10 15:07:20