Ste*_*bob 8 vb.net wpf user-controls
我有一个UserControl,我们将其称为myUC,这是myWindow我的WPF应用程序的主窗口()中的几个UserControl之一. myUC包含许多标准控件,其中一个是按钮,我们称之为myButton.
当我点击时myButton,我想执行myMethod(),它存在于myWindow的代码隐藏中.
问题是,即使存在myUC也不知道myWindow,更不用说myMethod存在了.
我该如何发送消息:'嘿,myWindow,醒来.myUc上的myButton刚刚被点击; 请运行myMethod'?
您可以在窗口中创建命令,并将按钮的Command属性设置为此命令的名称.单击该按钮将触发该命令,而无需引用父窗口.
我实际上最终不得不在VB中做什么:
为我的自定义命令创建一个新的公共类,因为不希望我的MainWindow类为Public:
Public Class Commands
Public Shared myCmd As New RoutedCommand
End Class
Run Code Online (Sandbox Code Playgroud)
创建运行所需代码的Execute和CanExecute方法.这两个方法是在MainWindow代码后面创建的:
Class MainWindow
Private Sub myCmdCanExecute(ByVal sender As Object, ByVal e As CanExecuteRoutedEventArgs)
e.CanExecute = True
e.Handled = True
End Sub
Private Sub myCmdExecuted(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
//Do stuff here...
e.Handled = True
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
在MainWindow代码隐藏中创建Command绑定,并将两个处理程序方法添加到绑定(这是C#和VB之间完全不同的部分):
Class MainWindow
Public Sub New()
// This call is required by the designer.
InitializeComponent()
//Add any initialization after the InitializeComponent() call.
//Create command bindings.
Dim cb As New CommandBinding(Commands.myCmd)
AddHandler cb.CanExecute, AddressOf myCmdCanExecute
AddHandler cb.Executed, AddressOf myCmdExecuted
Me.CommandBindings.Add(cb)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
将新的自定义命令添加到UserControl上的按钮对象.使用自定义命令,这在XAML中似乎不可能,因此我必须在代码隐藏中执行此操作.Commands类必须是Public,因此可以在此UserControl中访问命令:
Public Class myUserControl
Public Sub New()
//This call is required by the designer.
InitializeComponent()
// Add any initialization after the InitializeComponent() call.
myButton.Command = Commands.myCmd
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10931 次 |
| 最近记录: |