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

I Have a Button in a UserControl which should call a method in the main window

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

您可以通过在按钮 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();

然而,这是一个非常糟糕的 class 设计,因为现在您的用户控件取决于嵌入特定的 window。

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

public event EventHandler myEventHandler;

private void Button_Click(object sender, RoutedEventArgs e)
{
    var handler = myEventHandler;
    if (handler != null) handler(this, EventArgs.Empty);
}

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