C# UWP上的水平滑动手势
是否有任何方法可以使用wptoolkit获得与windows phone 8相同的刷卡手势。 因为wptoolkit nuget包不适用于uwp,所以我无法在uwp上获得类似的滑动手势 在windows Phone 8中,借助WPtoolkit nugetget软件包 我把这个C# UWP上的水平滑动手势,c#,xaml,uwp,uwp-xaml,swipe-gesture,C#,Xaml,Uwp,Uwp Xaml,Swipe Gesture,是否有任何方法可以使用wptoolkit获得与windows phone 8相同的刷卡手势。 因为wptoolkit nuget包不适用于uwp,所以我无法在uwp上获得类似的滑动手势 在windows Phone 8中,借助WPtoolkit nugetget软件包 我把这个 <toolkit:GestureService.GestureListener> <toolkit:GestureListener Flick="OnSwipe"/> </
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener Flick="OnSwipe"/>
</toolkit:GestureService.GestureListener>
我在uwp上尝试了scrollViewer的操作方法,但它不断增加值,直到scroll viewer停止
这是密码
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();
}
}
}
实现相同功能的任何其他方法。实际上,在这种情况下,您不需要处理
操作启动
,也不需要initialPoint
属性。假设您已经将ScrollViewer的操作模式定义为以下内容
ManipulationMode="TranslateX,TranslateInertia,System"
然后您只需使用e.Cumulative.Translation.X
来告诉您总共刷卡了多长时间
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 x:Name="txtBox1"
ManipulationMode="TranslateX,TranslateInertia,System"
ManipulationDelta="txtBox1_ManipulationDelta"
ManipulationCompleted="txtBox1_ManipulationCompleted" />
但在scroll viewer停止之前,该值仍会持续增加,这意味着该值会增加两倍。任何其他更好的建议来代替文本块上的ScrollViewer它工作得有点晚(刷卡后需要等待1或1.5秒)它不工作InstantlyAy:),哦,我只是尝试了scroll viewer和文本块,两者都工作得很相似它不工作两次,它只工作了0.5或1秒。延迟,正因为如此,我无意中刷了很多次,但为什么它能在延迟上工作呢?尼斯:)现在它可以毫不延迟地立即完美工作。谢谢你把宝贵的时间花在我的问题上,很高兴这有帮助!
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;
}
<TextBox x:Name="txtBox1"
ManipulationMode="TranslateX,TranslateInertia,System"
ManipulationDelta="txtBox1_ManipulationDelta"
ManipulationCompleted="txtBox1_ManipulationCompleted" />