首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UWP上的水平滑动手势

UWP上的水平滑动手势
EN

Stack Overflow用户
提问于 2017-08-07 15:33:06
回答 1查看 784关注 0票数 2

有什么方法可以获得与windows 8相同的滑动手势和wptoolkit。由于wptoolkit包无法用于uwp,所以在WPtoolkit nugetget包的帮助下,我无法在windows Phone 8中获得类似的UWP滑动手势。

代码语言:javascript
运行
复制
<toolkit:GestureService.GestureListener>
         <toolkit:GestureListener Flick="OnSwipe"/>
</toolkit:GestureService.GestureListener>

在文本块上,所以我可以从左到右或从右到左在textbox1上滑动。滑动手势帮助我实现这个

代码语言:javascript
运行
复制
private static int i;
private void OnSwipe(object sender, FlickGestureEventArgs e)
    {
        if (e.HorizontalVelocity < 0)
        {
              i++;
              txtBox1.Text = i.ToString();             
        }

        if (e.HorizontalVelocity > 0)
        {
             i--;
             txtBox1.Text = i.ToString();
        }
    }

我在uwp上尝试了使用scrollViewer的Manupulation方法,但是它不断地增加值,直到滚动器停止为止。

这是密码

代码语言:javascript
运行
复制
    private static int i;
    private Point initialpoint;
    private void scrollview_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
    {
        initialpoint = e.Position;
    }

    private void scrollview_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
    {
        if (e.IsInertial)
        {
            Point currentpoint = e.Position;
            if (currentpoint.X - initialpoint.X >= 2)
            {
                i++;
                txtBox1.Text = i.ToString();
            }

            if (currentpoint.Y - initialpoint.Y >= 2)
            {
                i--;
                txtBox1.Text = i.ToString();
            }
        }
    }

实现相同功能的任何其他方式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-07 21:33:29

实际上,在这种情况下,您不需要处理ManipulationStarted,也不需要initialPoint属性。假设您已经将ScrollViewerManipulationMode定义为

代码语言:javascript
运行
复制
ManipulationMode="TranslateX,TranslateInertia,System"

然后,您只需使用e.Cumulative.Translation.X来判断您总共滑动了多长时间

代码语言:javascript
运行
复制
private void scrollview_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
    if (e.IsInertial)
    {
        var swipedDistance = e.Cumulative.Translation.X;

        if (Math.Abs(swipedDistance) <= 2) return;

        if (swipedDistance > 0)
        {
            i++;
        }
        else
        {
            i--;
        }

        txtBox1.Text = i.ToString();
    }
}

更新

现在我已经更好地理解了您的问题,我认为您应该处理TextBox本身的手势操作。如果您想要即时反馈,只需订阅ManipulationDelta事件并创建一个标志,以便每次触摸只运行一次刷逻辑。

代码语言:javascript
运行
复制
private bool _isSwiped;
private void txtBox1_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
    if (e.IsInertial && !_isSwiped)
    {
        var swipedDistance = e.Cumulative.Translation.X;

        if (Math.Abs(swipedDistance) <= 2) return;

        if (swipedDistance > 0)
        {
            i++;
        }
        else
        {
            i--;
        }

        txtBox1.Text = i.ToString();

        _isSwiped = true;
    }
}

private void txtBox1_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
    _isSwiped = false;
}

确保移动所有处理程序并将ManipulationMode设置为TextBox

代码语言:javascript
运行
复制
<TextBox x:Name="txtBox1"
         ManipulationMode="TranslateX,TranslateInertia,System" 
         ManipulationDelta="txtBox1_ManipulationDelta" 
         ManipulationCompleted="txtBox1_ManipulationCompleted" />
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45550684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档