c# - 带有 Mvvm Light 处理鼠标和触摸的 WPF

标签 c# wpf mvvm touch

目前我必须开发一个非常简单的 WPF 用户控件,允许用户在 Canvas 上选择多个点。我遇到的困难是,使用触摸屏的用户应该能够通过触发 TouchDown 事件来实现这一点,而没有触摸屏的用户应该使用鼠标,从而触发 MouseLeftButtonDown 事件。有没有一种简单的方法可以处理这两种情况而不重复代码?另外,我需要使用 Mvvm Light,因此代码隐藏解决方案如 How to get Touchscreen to use Mouse Events instead of Touch Events in C# app不会成功的。

最佳答案

无论您是否使用 MVVM,您链接的问题都会为您提供答案。使用 MVVM 并不意味着您无法处理 UI 控制事件。它只是意味着您应该编写一个附加属性来为您处理它们。因此,您的答案是肯定的,您可以一起处理这两个事件,并且按照链接页面建议的方式几乎相同。

唯一的区别是处理程序必须附加到附加属性中的事件。我不会在这里再次回顾整个故事,而是简单地解释一下整个过程,并请求您查看我在 What's the best way to pass event to ViewModel? 中的答案。代码示例问题。

第一declare your Attached Property及其 getter 和 setter 并确保它有 PropertyChangedCallback handler随附的。 PropertyChangedCallback 处理程序是您将单个处理程序附加到事件的位置(代码示例仅附加一个事件)。这仅意味着当您设置附加属性时,它只会将处理程序附加到事件。最后,只需添加单个处理程序来处理这两个事件。

关于c# - 带有 Mvvm Light 处理鼠标和触摸的 WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23994902/

相关文章:

c# - 调用 DoubleClick Bid Manager API

c# - 从其他进程向 WPF 单例应用程序发送数据

wpf - 使用触发器更改 XAML 映射图钉的背景颜色

c# - 异步方法导致奇怪的异常

c# - 使用 MVVM 将数据绑定(bind)到 WPF 中的 ListView 控件

c# - 在 WPF 应用程序中使用服务定位器模式时的 View 模型范围

c# - Cassandra C# insert 似乎正在删除先前的数据?

c# - 无法在 Asp.NET MVC 中命中 Api 路由

c# - 将 sprintf 转换为 C# 的问题

c# - 从嵌入式资源创建图像