有什么方法可以获得与windows 8相同的滑动手势和wptoolkit。由于wptoolkit包无法用于uwp,所以在WPtoolkit nugetget包的帮助下,我无法在windows Phone 8中获得类似的UWP滑动手势。
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener Flick="OnSwipe"/>
</toolkit:GestureService.GestureListener>在文本块上,所以我可以从左到右或从右到左在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();
}
}
}实现相同功能的任何其他方式。
发布于 2017-08-07 21:33:29
实际上,在这种情况下,您不需要处理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" />https://stackoverflow.com/questions/45550684
复制相似问题