按钮技巧 - IsDefault / IsCancel(以及其他可用性技巧)
快速提示:用于带有保存/插入/取消按钮的表单/窗口/视图
源代码包含一个简单的解决方案,该方案带有一个WPF表单,演示了这些属性的使用。
引言
有多少次您必须填写表单,然后不得不使用鼠标单击“保存”/“继续”/“插入”/“取消”按钮,或者单击Tab键直到您位于正确的按钮上,然后按Enter键?
我见过商业应用程序也存在这个问题,这很可笑,因为它很容易解决。
正常使用案例
您有一个以两种典型方式之一结束的表单
- 用户很高兴并点击“保存”或“继续”按钮。
- 用户感到恼火/改变主意/觉得事情太麻烦了,然后点击“取消”按钮。
使用良好的MVVM方法,一些开发人员会倾向于在TextBox
上使用命令,甚至可能在代码背后编写一些代码来查找“Enter”并运行“保存”命令。 现在,这是可以做到的,但是这浪费了时间和资源,因为有一个更简单的解决方案:Button
的IsDefault
和IsCancel
属性。
<Button IsDefault="true"
Click= "SaveClicked"
Content="Save" ... />
这段小魔法将导致“Enter”键在AccessKeyManager中注册,因此,无论何时您在该表单的TextBox中按“Enter”键,它都会调用按钮的Click命令。
取消也一样(因此,无论何时您按“Esc”键,您的取消按钮都会触发),只是您将使用以下代码
<Button IsCancel="true"
Click="CancelClicked"
Content="Cancel" ... />
何时使用
我发现这在编辑对象时很有用。 双击该对象将打开一个新的窗口/视图,您可以在其中更新字段,然后按Enter键保存或按Esc键取消并返回到上一页(为了知道哪个是MVVM的最后一个视图,必须施展一些魔法,但这是另一篇文章的主题)。
其他需要做的事情
在生产环境中,您可能希望设置IsEnabled
以响应表单/视图上的某种类型的数据验证(有关Binding.ValidationRules
的更多信息,请查看MSDN)。 如果您这样做,并将按钮的IsEnabled
属性设置为False
,那么按Enter键将不会执行任何操作(因为该按钮已被禁用)。 取消也一样。
(如果您使用的是MVVM-Light或任何类似的IoC框架,则RelayCommand
上应该有CanExecute
,它会为您执行此操作)。
其他想法
在设计和连接表单/窗口/视图时,始终牢记可用性和简单性。
如果用户发现您的应用程序使用起来很乏味,他将不会使用它(或者更糟糕的是,如果他必须使用它,他会诅咒编写它的人,那就是您)。
像这样的小事情,让事情似乎可以简单地工作,使体验更加顺畅,并帮助您的用户完成工作,而不是浪费时间与设计作斗争。
历史
- 10/09/13:首次发布