65.9K
CodeProject 正在变化。 阅读更多。
Home

按钮技巧 - IsDefault / IsCancel(以及其他可用性技巧)

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2013年10月9日

CPOL

2分钟阅读

viewsIcon

25992

downloadIcon

330

快速提示:用于带有保存/插入/取消按钮的表单/窗口/视图

源代码包含一个简单的解决方案,该方案带有一个WPF表单,演示了这些属性的使用。

引言

有多少次您必须填写表单,然后不得不使用鼠标单击“保存”/“继续”/“插入”/“取消”按钮,或者单击Tab键直到您位于正确的按钮上,然后按Enter键?

我见过商业应用程序也存在这个问题,这很可笑,因为它很容易解决。

正常使用案例

您有一个以两种典型方式之一结束的表单

  1. 用户很高兴并点击“保存”或“继续”按钮。
  2. 用户感到恼火/改变主意/觉得事情太麻烦了,然后点击“取消”按钮。

使用良好的MVVM方法,一些开发人员会倾向于在TextBox上使用命令,甚至可能在代码背后编写一些代码来查找“Enter”并运行“保存”命令。 现在,这是可以做到的,但是这浪费了时间和资源,因为有一个更简单的解决方案:ButtonIsDefaultIsCancel属性。

<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:首次发布
© . All rights reserved.