1

我有一个垂直的控件列表,我想在每次触摸移动时显示每个控件,拳头,我听 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 时,将用户控件移动到当前视图,就像循环选择器一样。但它的表现还不够好(与 ScrollViewer 的平滑滚动相比,它很糟糕)。

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

        <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 的点击事件。所以...无论如何控制 ScrollViewer 的滚动并让 ScrollViewer 活着。

4

0 回答 0