在不同的窗口(WPF应用程序)中单击按钮时调用函数

本文关键字:单击 按钮 函数 调用 应用程序 窗口 WPF | 更新日期: 2023-09-27 18:08:35

我从wpf应用程序的一个页面启动一个窗口,我想在子窗口中按下按钮时调用一个函数

下面是调用窗口的页面:

namespace AppWpf10
{
    public partial class Prepare : System.Windows.Controls.Page
    {
        private void button_Click(object sender, RoutedEventArgs e)
        {
            Choice win2 = new Choice();
            win2.Show();
        }
        public void DoStuff()
        {
            //CODE THAT DOES STUFF
        }
    }
}

窗口启动:

namespace appWpf10
{
    public partial class Choice : Window
    {
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
    }
}

所以我希望DoStuff()在另一个窗口中按下button1时被调用。我该怎么做呢?从子窗口调用button1_Click中的DoStuff() ?或者添加一个事件"button1 pressed in other window" ?

不管怎样,有人知道怎么写吗?

在不同的窗口(WPF应用程序)中单击按钮时调用函数

一种解决方案是在构造函数中给子窗口指定父窗口,然后它可以调用父窗口的方法:

private void button_Click(object sender, RoutedEventArgs e)
{
    Choice win2 = new Choice(this);
    win2.Show();
}

public partial class Choice : Window
{
    Prepare parent;
    public Choice(Prepare parent)
    {
        this.parent = parent;
    }
    private void button1_Click(object sender, RoutedEventArgs e)
    {
        parent.DoStuff();
        this.Close();
    }
}

嗯,有很多方法,从它的外观来看,你不会走MVVM路线,这很好。因此,在您的特殊情况下,一种简单的方法是在实际创建子按钮时订阅子按钮单击事件,假设您将按钮命名为:

namespace AppWpf10
{
    public partial class Prepare : System.Windows.Controls.Page
    {
        private void button_Click(object sender, RoutedEventArgs e)
        {
            Choice win2 = new Choice();
            win2.Show();
            win2.button1.Click += clickEventHandler;
        }
        private void clickEventHandler(object sender, RoutedEventArgs e)
        {
            DoStuff();
        }
        public void DoStuff()
        {
            //
        }
    }
}

下面的代码为我工作。我已经为显示弹出窗口生成了一个事件,弹出窗口控件正在放入另一个(MainWindow)窗口页面,我正在从FooterPanel渲染,这是我的UserControl在WPF中。

foreach (Window window in Application.Current.Windows)
{
     if (window.GetType() == typeof(MainWindow))
     {
         (window as MainWindow).MyPopup.IsOpen = true;
     }
}

你也可以参考有另一种方法的链接。https://learn.microsoft.com/en us/dotnet/desktop/wpf/events/how - -添加一个事件处理程序-使用- code?view=netdesktop - 6.0