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



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

可以通过在按钮内部调用下面的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 . getwwindow (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);
}

你也可以使用不同于这里的事件处理程序来满足你的需要。

最新更新