2008-12-06 78 views
3

除了在Mouse/Key Up/Down事件处理程序中设置多个标志之外,是否有一种简单的方法可以告诉触发Button的Click事件?我目前只对区分鼠标和其他东西感兴趣,但如果可能的话,处理Stylus和其他输入类型将会很好。我是否必须创建自己的按钮控件才能实现此目的?如何判断按钮点击事件是由WPF中的键盘还是鼠标触发的?

编辑:为了说明我为什么在意:在这种特殊情况下,我试图为某种图片浏览器实现“下一个”和“上一个”按钮。有问题的照片可能大小不同,按钮的位置也会改变(所以它们总是居中在照片下方)。如果您需要滚动浏览多张图片,使用鼠标按下这些按钮非常烦人,所以我希望鼠标位置相对于点击按钮保持不变,但只有在鼠标点击而不是键盘时。

编辑2:无论按钮位于顶部还是底部,都无关紧要,因为中心可以随时更改。 “图片浏览器”在这里只是一个抽象概念,在这个特殊情况下,图片的左上角保留了它的位置对我来说很重要,但是在详细讨论中超出了问题的范围。缩放图片在这类应用程序中并不是那么微不足道,所以我确实想知道我要求不要进入UI实现讨论的问题的答案。

+0

我的回答没有给你足够的信息,或者我错过了什么吗? – Micah 2008-12-07 23:30:04

+0

您的回答正是我没有要求的 - 分别处理鼠标/键上下事件处理程序。是的,这是一种做法,但并不像我希望的那样优雅。 – 2008-12-08 05:32:51

回答

6
if (InputManager.Current.MostRecentInputDevice is KeyboardDevice) 
0

您应该专门处理MouseXXX,StylusXXx和KeyboardXXX事件。

0

你能详细说明你为什么会在意吗?

多年来,我自己写了很多自定义控件,我不记得有一个例子我关心点击事件是如何触发的。 (除了VB6之前的控制生命周期小故障,它取决于你点击一个按钮,使用了一个加速键,还是按下ENTER作为默认值,以不同的顺序触发了焦点点击丢失焦点)。

+0

在我的情况下,我有一个文本框在推入回车将点击默认按钮。如果用户没有输入一个值,我想警告他们(由于之前的操作,这很容易)。但是,如果他们点击按钮本身,我认为这是故意的,他们不想输入一个值。 – 2011-08-19 07:50:12

0

就我个人而言,当人们将按钮放在Windows窗体和网页的底部时,我觉得很烦人。阅读关于用户界面的一些文献,你会发现,如果大多数人在页面/表单上没有找到有趣的内容,他们甚至都没有那么远。只要我知道内容对我来说不感兴趣,我希望能够点击下一个,所以请将导航按钮保留在顶部。

我会把prev/next放在图片的顶部,您可以控制它们的位置。跳舞这些按钮违背了关于UI一致性的大多数意见。为鼠标用户和键盘用户进一步创造不同的体验也违背了目前大多数关于良好UI设计的看法。

另一种方法是选择一个图片可以在UI上获得的恒定最大大小,如果它超过该比例以适合它,则允许它在一帧内自由更改。如果您绝对必须将它们放在底部,这可以让您的按钮保持在同一个位置。

0

你可以用不同的设备创建一个枚举,拥有一个你每次设置鼠标/键盘等设置的全局属性。已启动,只需在需要时提及即可。