禁用鼠标点击
问题描述:
我遇到一个问题,点击某个按钮并且过程需要一段时间后,用户在GUI屏幕上单击其他位置。这些按钮点击会在调度程序中排队,因此在初始按钮点击后,其他位置会被点击。我想阻止这种情况发生,所以其他UI控件在完成处理后不会被点击。我能想到的唯一解决方案就是锁定鼠标事件并防止它们在按钮点击正在处理时传递给应用程序。这是最好的方法吗?禁用鼠标点击
答
如果该过程需要一段时间,通常建议在工作线程而不是GUI线程中执行此类过程。因此,使用BackgroundWorker
办法想在这个CodeProject article,然后使用具有特定的按钮关联的命令CanExecute
方法,就像这里:
WPF Commanding – When do Commands re-evaluate their CanExecute method?
WPF – CanExecute refreshed
编辑:
可以绑定的IsEnabled
财产您的其他控件为Command的CanExecute方法的结果。
How to disable combobox when command canExecute returns false
How to bind a ComboBoxItem's IsEnabled property to the result of a Command's CanExecute method
答
解决这个问题的一个更简单的方法是在某些长时间运行的任务正在进行时弹出一些半透明覆盖图(可能包含进度信息)。这将可靠地禁用整个用户界面,直到您删除覆盖(这使您不必执行大量更改/绑定IsEnabled属性)。
这些是如何在单击后禁用单个按钮的很好的示例,但是它不会阻止在处理按钮命令执行处理程序时单击其他按钮或UI组件(如组合框)。 – Robert 2011-05-16 16:20:15
@Robert:编辑我的答案。 – Paya 2011-05-16 16:33:06