windowsphone滚动项目一个接一个

时间:2014-01-15 12:58:41

标签: c# silverlight windows-phone scrollviewer loopingselector

我有一个垂直控件列表,我想在每次触摸移动时显示每一个控件, 拳头,我听ManipulationDelta事件并改变图像翻译y,像这样, XAML,

            <Grid ManipulationDelta="Image_ManipulationDelta">
                <UserControl/>
                <UserControl/>
                ...
                <UserControl RenderTransformOrigin="0.5,0.5" >
                    <UserControl.RenderTransform>
                        <CompositeTransform x:Name="transfom" TranslateY="604"/>
                    </UserControl.RenderTransform>
                </UserControl>  
            </Grid>

代码背后,

    private void Image_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
    {
        this.transfom.TranslateY += e.DeltaManipulation.Translation.Y;
    }

当ManipulationCompleted时,将usercontrol移动到当前视图,就像loopingselector那样。 但它的表现还不够好(与ScrollViewer平滑的scrooling相比,它很糟糕)。

然后我尝试在ScrollViewer上工作,我必须停止scrollviewer自己的滚动,两种方式,IsHitTestVisible = False或IsEnable = false.But无论如何scrollviewer如何滚动,所以,我给了scrollViewer的父级,像这样, XAML,

        <phone:PivotItem ManipulationDelta="scrollViewer_ManipulationDelta">
            <ScrollViewer IsHitTestVisible="False">
                <StackPanel>
                    <UserControlHeight="604" Background="DarkRed"/>
                <UserControlHeight="604" Background="DarkRed"/>
                    <UserControl Height="604"  Background="DarkBlue"/>
                </StackPanel>
            </ScrollViewer>
        </phone:PivotItem>

代码背后,

    private void scrollViewer_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
    {
        Debug.WriteLine("ManipulationDelta:" + e.CumulativeManipulation.Translation.Y);
        this.scrollViewer.ScrollToVerticalOffset(this.scrollViewer.VerticalOffset - e.DeltaManipulation.Translation.Y);
    }
是的,它很棒,但...... IsHitTestVisible =“False”表示ScrollViewer中无法捕获任何内容,例如,我无法获取UserControl的tap事件。 所以......无论如何都可以控制ScrollViewer的滚动并使ScrollViewer活跃起来。

0 个答案:

没有答案