我在 UserControl 中有一个按钮,它应该在主窗口中调用一个方法

Posted

技术标签:

【中文标题】我在 UserControl 中有一个按钮,它应该在主窗口中调用一个方法【英文标题】:I Have a Button in a UserControl which should call a method in the main window 【发布时间】:2021-12-02 16:42:09 【问题描述】:

我想通过用户 Controll(我的侧边栏)中的按钮触发主窗口中的方法。我该怎么做?

【问题讨论】:

您的用户控件应该发出一个您的主窗口可以订阅的事件。如何存档这个,idk,因为我不使用 wpf。 最简单的方法是在主窗口类上实现 ICommand 并将 Button.Command 属性绑定到它。 Commanding Overview. 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。 【参考方案1】:

您可以通过在按钮 void 中调用以下内容来实现此目的。

private void Button_Click(object sender, RoutedEventArgs e)

    Window parentWindow = Window.GetWindow(this);
    parentWindow.Foo() // Foo is your Functions name inside of the main window.

如果这不起作用,您可以将 Window.GetWindow(this) 的结果转换为 MainWindow,如下所示

MainWindow parentWindow = (MainWindow)  Window.GetWindow(this);
parentWindow.Foo();

然而,这是一个非常糟糕的类设计,因为现在您的用户控件依赖于嵌入到特定窗口中。

您应该做的是向父控件可以订阅的用户控件添加一个事件。

public event EventHandler myEventHandler;

private void Button_Click(object sender, RoutedEventArgs e)

    var handler = myEventHandler;
    if (handler != null) handler(this, EventArgs.Empty);

您也可以使用与此处提供的不同的事件处理程序来满足您的需求。

【讨论】:

以上是关于我在 UserControl 中有一个按钮,它应该在主窗口中调用一个方法的主要内容,如果未能解决你的问题,请参考以下文章

在单击按钮的Wpf中使用usercontrol

将UserControl显示为弹出窗口

CATEL按钮未运行UserControl中的执行操作

WPF中UserControl控件的关闭

UserControl 动画按钮的背景

将 UserControl 属性设置为不显示在 VS 属性窗口中