c# - Windows 中的自定义边缘滑动事件(用于底部边缘)
问题描述
我想打开一个应用程序或通过底部滑动来做某事,那么我该怎么做才能获得该事件?是这样的:https ://www.microsoft.com/zh-cn/videoplayer/embed/fc016fcc-2bb1-4294-b236-343e1a533401?autoCaptions=en-us
我尝试在 UWP 应用程序中使用EdgeGesture类,它提供了Starting、Completed和Canceled事件。但是当我在屏幕边缘滑动时,没有触发任何事件。
在 MainPage.xaml.cs 中:
public MainPage()
{
this.InitializeComponent();
//ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
EdgeGesture gesture = EdgeGesture.GetForCurrentView();
gesture.Starting += Gesture_Starting;
gesture.Completed += Gesture_Completed;
gesture.Canceled += Gesture_Canceled;
}
private void Gesture_Canceled(EdgeGesture sender, EdgeGestureEventArgs args)
{
throw new NotImplementedException();
}
private void Gesture_Completed(EdgeGesture sender, EdgeGestureEventArgs args)
{
throw new NotImplementedException();
}
private void Gesture_Starting(EdgeGesture sender, EdgeGestureEventArgs args)
{
throw new NotImplementedException();
}
不知道是不是我做错了,能帮帮我吗?还是有其他方法可以做到这一点?
解决方案
在桌面模式下,UWP 应用程序是一个窗口应用程序,难以捕获屏幕边缘滑动事件,并且EdgeGesture
可能在平板电脑模式下工作。
为了适应不同情况的滑动需求,可以考虑使用GestureRecognizer
.
这里我给大家一个简单的页面供大家参考。
<Page ...>
<Grid Background="White">
</Grid>
</Page>
private GestureRecognizer _GestureRecognizer;
PointerEventHandler PointerPressedEventHandler;
PointerEventHandler PointerMovedEventHandler;
PointerEventHandler PointerReleasedEventHandler;
PointerEventHandler PointerCanceledEventHandler;
private double startY = 0;
private double moveY = 0;
public GesturePage()
{
this.InitializeComponent();
_GestureRecognizer = new GestureRecognizer();
_GestureRecognizer.GestureSettings = GestureSettings.ManipulationTranslateY;
_GestureRecognizer.ManipulationStarted += _GestureRecognizer_ManipulationStarted;
_GestureRecognizer.ManipulationUpdated += _GestureRecognizer_ManipulationUpdated;
_GestureRecognizer.ManipulationCompleted += _GestureRecognizer_ManipulationCompleted;
PointerPressedEventHandler = new PointerEventHandler(_PointerPressed);
PointerMovedEventHandler = new PointerEventHandler(_PointerMoved);
PointerReleasedEventHandler = new PointerEventHandler(_PointerReleased);
PointerCanceledEventHandler = new PointerEventHandler(_PointerCanceled);
this.AddHandler(UIElement.PointerPressedEvent, PointerPressedEventHandler, true);
this.AddHandler(UIElement.PointerMovedEvent, PointerMovedEventHandler, true);
this.AddHandler(UIElement.PointerReleasedEvent, PointerReleasedEventHandler, true);
this.AddHandler(UIElement.PointerCanceledEvent, PointerCanceledEventHandler, true);
}
private void _GestureRecognizer_ManipulationStarted(GestureRecognizer sender, ManipulationStartedEventArgs args)
{
startY = args.Position.Y;
}
private void _GestureRecognizer_ManipulationUpdated(GestureRecognizer sender, ManipulationUpdatedEventArgs args)
{
moveY += Math.Abs(args.Delta.Translation.Y);
}
private void _GestureRecognizer_ManipulationCompleted(GestureRecognizer sender, ManipulationCompletedEventArgs args)
{
if (moveY >= 50)
{
// Can be understood as sliding a distance
if (startY <= 10)
{
// head to foot
}
else if (startY >= Window.Current.Bounds.Height - 10)
{
// foot to head
}
startY = 0;
MoveY = 0;
}
}
private void _PointerPressed(object sender, PointerRoutedEventArgs e)
{
var pointer = e.GetCurrentPoint(this);
_GestureRecognizer.ProcessDownEvent(pointer);
}
private void _PointerMoved(object sender, PointerRoutedEventArgs e)
{
var pointers = e.GetIntermediatePoints(this);
_GestureRecognizer.ProcessMoveEvents(pointers);
}
private void _PointerCanceled(object sender, PointerRoutedEventArgs e)
{
var pointer = e.GetCurrentPoint(this);
_GestureRecognizer.CompleteGesture();
}
private void _PointerReleased(object sender, PointerRoutedEventArgs e)
{
var pointer = e.GetCurrentPoint(this);
_GestureRecognizer.ProcessUpEvent(pointer);
}
手指、鼠标和笔Pointer
在点击屏幕时会触发相关事件。上述代码的目的是捕获Pointer
事件并将其传递给GestureRecognizer
处理。
这是文件
此致。
推荐阅读
- python - 无法在 Spyder 上使用 Astropy
- javascript - 如何通过使用 laravel 解析将使用 api 获取的 json 文件转换为 javascript 对象?
- node.js - Messagebird SMS 身份验证/OTP 用于具有节点 js 和颤振的移动应用程序
- json - oracle解析对象数组
- mysql - Cat unix 命令多线程安全吗?在多台主机上寻找并行 mysql 还原
- typescript - 如何解决我在安装 vscode 以测试我的扩展程序时遇到的错误?
- c - 使用 malloc 在 C 中存储坐标
- json - 在 Flutter 中显示来自 API 响应的完整 json 数据
- confluent-kafka-python - 融合 kakfa 生产者 KafkaError{code=_MSG_TIMED_OUT,val=-192,str="Local: Message timed out"}
- javascript - 检查所有段落中的某些单词并添加到列表中