首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在UserControl上单击一个按钮如何在包含窗口中执行一个方法?

在UserControl上单击一个按钮如何在包含窗口中执行一个方法?
EN

Stack Overflow用户
提问于 2010-11-17 05:45:44
回答 6查看 11.2K关注 0票数 8

我有一个UserControl,我们称之为myUC,它是我的WPF应用程序主窗口(myWindow)中的几个UserControls之一。myUC包含许多标准控件,其中一个是按钮,我们称之为myButton

当我单击myButton时,我想执行myMethod(),它存在于myWindow的代码隐藏中。

问题是myUC根本不知道myWindow的存在,更不用说myMethod的存在了。

我如何发送这样的信息:‘嘿,myWindow,醒醒。刚刚点击了myUc上的myButton;请运行我的方法’?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-11-17 05:55:32

可以在窗口中创建命令,并将按钮的command属性设置为此命令的名称。单击该按钮将触发命令,而不需要引用父窗口。

This tutorial explains everything very clearly.

票数 8
EN

Stack Overflow用户

发布于 2010-11-17 07:12:57

我最终不得不在VB中做的事情是:

为我的自定义命令创建一个新的公共类,因为将我的MainWindow类设置为公共是不可取的:

代码语言:javascript
运行
复制
Public Class Commands
  Public Shared myCmd As New RoutedCommand
End Class

创建运行所需代码的Execute和CanExecute方法。这两个方法是在后面的MainWindow代码中创建的:

代码语言:javascript
运行
复制
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

在MainWindow代码隐藏中创建命令绑定,并将两个处理程序方法添加到绑定中(这是C#和VB之间非常不同的部分):

代码语言:javascript
运行
复制
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

将新的自定义命令添加到UserControl上的按钮对象。使用自定义命令,这在XAML中似乎是不可能的,所以我必须在代码隐藏中完成。Commands类需要是公共的,以便可以在此UserControl中访问命令:

代码语言:javascript
运行
复制
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
票数 5
EN

Stack Overflow用户

发布于 2010-11-17 05:55:19

我建议学习Routed EventsRouted Commands -这是他们应该做的事情。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4199312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档