我在工具栏上有一个按钮,其命令设置为“MyControl.Print”(例如)。 在控件中,命令被添加到命令绑定中,包括Execute和CanExecute。
控件位于窗口内,其他控件适当停靠。 我发现要启用“打印”按钮,我必须首先“选择”MyControl,它不能提供良好的用户体验,确实会导致各种“错误”被引发并造成很多混乱。
是否可以确保按钮启用,无论控件是否已被“选中”?
答案 0 :(得分:1)
由于CanExecute没有触发,我认为你可能正在考虑RoutedCommands的主要缺点 - 它们隧道和冒泡的方式可能会留下一个高度组合的界面,无法让命令到达任何有用的地方。出于这个原因,我们最终从(我认为)微软CAG转移到DelegateCommands。不是任何其他东西,只是命令。工作得更好,并没有如此紧密地绑在界面上。
哦,另一个回应提出了一个好点。我认为你的意思是永远打印,你的MyControl需要键盘焦点。这只是第一次,之后才起作用吗?
我建议http://msdn.microsoft.com/en-us/library/ff921126(PandP.20).aspx作为一个很好的起点。您不必过多担心IActiveAware,因为您希望此命令始终可用(或至少让其可用性由CanExecute确定)。
答案 1 :(得分:1)
CommandManager.InvalidateRequerySuggested将强制命令管理器重新调用所有CanExecute方法,并应禁用该按钮。也许称之为onload?