ScrollViewer对齐

时间:2014-01-29 16:18:15

标签: xaml windows-phone-8 windows-phone scrollviewer

我在Windows Phone 8项目上有这个ScrollViewer

<ScrollViewer Name="MediaScroll" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto" Background="#7FD13E3E" Tap="ScrollViewer_Tap" VerticalAlignment="Top" LayoutUpdated="MediaScroll_LayoutUpdated">
            <ItemsControl ItemTemplate="{StaticResource ItemTemplate2}" ItemsPanel="{StaticResource ItemsPanelTemplate1}" ItemsSource="{Binding listaMedia}">

            </ItemsControl>
        </ScrollViewer>

使用这些模板

    <phone:PhoneApplicationPage.Resources>

    <ItemsPanelTemplate x:Key="ItemsPanelTemplate1">
        <StackPanel Orientation="Horizontal" Margin="0,0,0,0"/>
    </ItemsPanelTemplate>

    <DataTemplate x:Key="ItemTemplate2">

        <StackPanel Width="480">
            <Image Source="/Assets/play@2x.png" Width="75" Canvas.ZIndex="10" Margin="203,85,202,0"  />
            <Image Source="{Binding snapshot.path}" Stretch="Fill" VerticalAlignment="Top" Margin="0,-160,0,0" />
        </StackPanel>
        <!--<Image Tag="{Binding id}"  Source="{Binding snapshot.path}" Width="150" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="-10,0,-9,0" Tap="Image_Tap" />-->
        <!--Your other code-->
    </DataTemplate>

</phone:PhoneApplicationPage.Resources>

我得到一个包含图像的列表,滚动显示水平。 当我滚动我想要ScrollViewer捕捉到最近的图像,这意味着如果滚动显示2个图像的一部分,它会自动滚动到最近的图像并显示该图像。 我不希望滚动显示2个图像的两半基本上

不确定我是否可以使用LayoutUpdated事件执行此操作。

1 个答案:

答案 0 :(得分:1)

您不应该使用ScrollViwer。如果您需要自定义滚动,您可以自己编写控件,或者如果图像数量较少,您可以重复使用Pivot

因此,您需要创建自己的用户控件并覆盖Manipulation *事件。当用户拖动图像时,您可以使用RenderTransform更新其翻译。您可以检测用户何时释放拖动,无论图像是否已移过其中间。在这种情况下,您可以在其位置手动设置下一个图像的动画。

为此,您需要自定义图像加载代码,主要在代码中构建的自定义动画。如果用户在动画中期开始再次拖动,请不要忘记取消现有动画。

我为缺乏代码道歉,但要么我会在这里发布整个解决方案(可能需要几个小时),或者我可以指出解决方案的细节。