WPFで作成したコントロールをSilverlightforWindowsPhoneに変換しようとしています。私は多くのことを学び、両方のバージョンに加えられた改善でかなり調整しましたが、SilverlightバージョンのListBoxからScrollViewerを取り出すことができないようです。それは最初からかなり単純に見えました:
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>
どうやらそれはSilverlightの読み取り専用プロパティなので、ContentTemplateバインディングをコメントアウトする必要がありましたか?これを片付け終わったら、もっと調査する必要があります。
私はこれをグーグルで検索することから多くを見つけることができません、他のほとんどの人々はある程度の成功のために上記の方法を使用しているようです。それは確かにWPFで動作します。