在不同的窗口(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" ?
不管怎样,有人知道怎么写吗?
一种解决方案是在构造函数中给子窗口指定父窗口,然后它可以调用父窗口的方法:
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