有没有办法使用 wptoolkit 获得与 Windows Phone 8 相同的滑动手势。 因为 wptoolkit nuget 包不适用于 uwp,所以我无法在 UWP 上获得类似的滑动手势 在 Windows Phone 8 中借助 WPtoolkit nugetget 包 我放置了这个
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener Flick="OnSwipe"/>
</toolkit:GestureService.GestureListener>
在文本 block 上,这样我就可以在 textbox1
上从左向右或从右向左滑动。
和滑动手势帮助我实现这个
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方法,但它不断增加值,直到滚动查看器停止
这是代码
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();
}
}
}
实现相同功能的任何其他方式。
最佳答案
实际上,在这种情况下,您不需要处理 ManipulationStarted
,也不需要 initialPoint
属性。假设您已将 ScrollViewer
的 ManipulationMode
定义为以下内容
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
本身上处理手势操作。如果您想要即时反馈,只需订阅 ManipulationDelta
事件并创建一个标志,以便每次触摸时仅运行一次滑动逻辑。
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
上。
<TextBox x:Name="txtBox1"
ManipulationMode="TranslateX,TranslateInertia,System"
ManipulationDelta="txtBox1_ManipulationDelta"
ManipulationCompleted="txtBox1_ManipulationCompleted" />
关于c# - UWP 上的水平滑动手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45550684/