wpf - 如何从用户控件触发自定义事件?

标签 wpf vb.net events user-controls

我有一个非常有趣的任务需要帮助。说明如下:

我有一个在主窗口中使用的用户控件 (SomeUserControl)。我完全在 SomeUserControl 上编写应用程序,主窗口托管 SomeUserControl,仅此而已。

现在我有一个关闭按钮(在 SomeUserControl 中),它应该关闭主窗口。这样做的原因是我不希望 SomeUserControl 关闭应用程序本身,而是从 SomeUserControl 触发事件,主窗口接收它,主窗口将关闭应用程序而不是 SomeUserControl。

我该怎么做?我不熟悉创建和处理自定义事件的概念,所以如果有人可以用文字和代码作为例子来解释它,我将非常感谢你!

编辑:到目前为止,这是我的代码。

(在窗口 2 中)
Public Event CloseApp As EventHandler

Private Sub CancelButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CancelButton.Click
    DialogResult = False
    RaiseEvent CloseApp(Me, New EventArgs)
End Sub

(在主窗口中)
公共(public) loginPage 作为新的 LoginPage
Public Sub New()
    InitializeComponent()
    AddHandler loginPage.CloseApp, AddressOf Me.ShutDownJobChangeWindow
End Sub

Private Sub ShutDownJobChangeWindow(ByVal sender As Object, ByVal e As EventArgs)
    Application.Current.Shutdown()
End Sub

目标:我想在窗口 2 中单击取消时关闭应用程序,但我不想以窗口 2 自行关闭的方式关闭应用程序,而是通过向主窗口发送一些通知,主窗口关闭应用程序.

最佳答案

最简单的方法是声明一个自定义事件:

public delegate void ShutdownEventHandler (object sender,  EventArgs data);
public event ShutdownEventHandler Shutdown;
protected void OnShutdown(EventArgs args)
{
    if(Shutdown != null)
        Shutdown(this, args);
}

然后订阅 MainWindow 中的 Shutdown 事件,并在那里处理关闭逻辑。
在 SomeUserControl 中,您只需在想要关闭应用程序时运行 OnShutdown。

关于wpf - 如何从用户控件触发自定义事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226149/

相关文章:

vb.net - 在标签中显示 MySQL 数据 - Vb.Net

vb.net - VB可以像C#一样从类中提取接口(interface)吗?

c# - _Application 和 Application 有什么区别

java - 事件在 Java Swing 中是如何工作的?

javascript - 如何为 NodeJS 中的事件扩展对象文字对象?

c# - ReactiveCommand 返回值和 View 反馈循环

.net - 如何获取 WPF 内置本地化字符串?

c# - 串口通讯显示

c# - 将 wpf View 保存为图像,最好是 .png

javascript - JQuery 自动滚动到底部(但禁用鼠标滚动)