C# 将RouteDiCommand命名空间连接到WPF(VB.NET)
我正在尝试创建一个自定义CommandBinding,我决定将其放入自己的类中,以便以后添加更多 XAML 使用self:cmdExit时,我获取一个CommandConverter无法转换System.String错误,使用self:cCustCmds.cmdExit时,我获取的名称cCustCmds在WPFtesting.CustomCommandserror中不存在 有没有一种特殊的方法来创建一个包含VB命令的类?我没有发现任何与VB相关的文档,所有基于C的,XAML中定义的命令绑定必须指向在主窗口中定义的方法: 原因是,当前WPF版本的XAML不允许我们以这种方式绑定事件处理程序。事件处理程序必须在MainWindow类内的代码隐藏文件中定义。我不知道这是否是一个bug,一个意外遗漏的特性,或者我们甚至不应该使用这个功能,但这阻止了我们定义一个集中的位置来处理所有命令的执行和CanExecute事件 一个选项是定义: 使用以下XAML:C# 将RouteDiCommand命名空间连接到WPF(VB.NET),c#,wpf,vb.net,xaml,C#,Wpf,Vb.net,Xaml,我正在尝试创建一个自定义CommandBinding,我决定将其放入自己的类中,以便以后添加更多 XAML 使用self:cmdExit时,我获取一个CommandConverter无法转换System.String错误,使用self:cCustCmds.cmdExit时,我获取的名称cCustCmds在WPFtesting.CustomCommandserror中不存在 有没有一种特殊的方法来创建一个包含VB命令的类?我没有发现任何与VB相关的文档,所有基于C的,XAML中定义的命令绑定必须指
<Grid>
<Menu DockPanel.Dock="Top">
<MenuItem Header="File">
<MenuItem Command="ApplicationCommands.Open"/>
</MenuItem>
</Menu>
</Grid>
我们得到以下结果:
另一个选项是Andy在评论中提到的内容:
为窗口创建ViewModel。
在ViewModel中定义命令
将窗口的事件绑定到命令中。
更多信息:现在很少有团队使用vb。这就是为什么你能找到的所有样品都是c夏普。不要使用你在那里的方法。改为绑定到viewmodel中的icommand公共属性。虽然这确实可以按我所希望的方式工作,但这不只是覆盖常规的ApplicationCommand.Open命令吗?我想我必须指向ICommand才能真正创建自定义命令?
Namespace CustomCommands
Public Class cCustCmds
Public cmdExit As New RoutedUICommand("Exit",
"Exit",
GetType(MainWindow),
New InputGestureCollection(New KeyGesture(Key.F4, ModifierKeys.Shift)))
End Class
End Namespace
Class MainWindow
Private Sub MainWindow_OnLoaded(sender As Object, e As RoutedEventArgs)
Dim openCmdBinding As New CommandBinding(
ApplicationCommands.Open, Sub(o, args) MyCommands.MyCommandExecute())
Me.CommandBindings.Add(openCmdBinding)
End Sub
End Class
Public Class MyCommands
Public Shared Sub MyCommandExecute()
MessageBox.Show("test")
End Sub
End Class
<Grid>
<Menu DockPanel.Dock="Top">
<MenuItem Header="File">
<MenuItem Command="ApplicationCommands.Open"/>
</MenuItem>
</Menu>
</Grid>