我有一个按钮:
<Button x:Name="MyButton" Command="SomeCommand"/>
Run Code Online (Sandbox Code Playgroud)
有没有办法从源执行命令?调用按钮上的单击没有帮助:
MyButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
Run Code Online (Sandbox Code Playgroud)
我的意思是 - 这确实引发了事件,但它没有提高命令.有什么类似于此RaiseEvent但只是为了命令?如果没有 - 我怎样才能实例化ExecutedRoutedEventArgs?可能吗?
最后 - 请不要告诉我如何avoid调用命令.
HCL*_*HCL 46
不确定你的意思是:
if(MyButton.Command != null){
MyButton.Command.Execute(null);
}
Run Code Online (Sandbox Code Playgroud)
c#6及更高版本(由eirik提出)有简短形式:
Mybutton.Command?.Execute(null);
Run Code Online (Sandbox Code Playgroud)
更新
正如@Benjol所建议的那样,CommandParameter在某些情况下可能需要提供按钮的-property值,而不是添加它null可以被视为默认模式:
Mybutton.Command?.Execute(MyButton.CommandParameter);
Run Code Online (Sandbox Code Playgroud)
或者,如果您无权访问UI元素,则可以直接调用静态命令.例如,我有一个系统范围的键挂钩App.xaml,想要调用我的播放/暂停/停止等媒体事件:
CustomCommands.PlaybackPlayPause.Execute(null, null);
Run Code Online (Sandbox Code Playgroud)
将第二个参数传递为null将调用所有附加元素.
我喜欢这样做的方法是按照Sean Sexton的推荐,以编程方式执行命令
简而言之,找到命令,检查它是否可以执行,如果可以,执行.
例:
if (ApplicationCommands.Open.CanExecute(null, null))
ApplicationCommands.Open.Execute(null, null);
Run Code Online (Sandbox Code Playgroud)
为什么我认为它更好: 我认为这是最好的方法,因为它将真正使用正确的路径而你不依赖于命名任何控件.此外,虽然您现在知道不使用"CanExecute",但您永远不知道某人将来何时会为其添加行为.
| 归档时间: |
|
| 查看次数: |
31299 次 |
| 最近记录: |