目前我必须开发一个非常简单的 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/