两个窗口之间的WPF事件
本文关键字:之间 WPF 事件 窗口 两个 | 更新日期: 2023-09-27 18:09:46
谁能给我演示一下如何设置这样的逻辑:
我有一个WPF控件。当一个按钮被按下时,它会做两种可能的事情之一。
。它检查是否加载了不同的WPF窗口。如果是,它将触发该窗口的Print方法。B.它检查是否加载了不同的WPF窗口。如果不是,则实例化该窗口,然后触发其Print方法。
我很难理解两个WPF控件/Windows之间的事件系统。这对我来说是一件相对较新的事情,所以如果有人能告诉我这一点,我会很感激。
p。这不是家庭作业,而是我的一个新爱好。如果这是一个完全陌生的问题,那就给我指出一个资源,这样我就可以自学了。
干杯!
首先,您将如何检查新Window
打开是否是您需要的?
你可以通过比较它们的Handle
或Type
(公共类MyWindowWithPrintMethod: Window)来做到这一点。
可以有多种方法。
我建议我的简单的方法,专注于WPF的方式,以最简单的方式解决你的目的。
MyWindowWithPrintMethod obj_MyWindowWithPrintMethod;
private void btnNewWindow_Click(object sender, RoutedEventArgs e)
{
obj_MyWindowWithPrintMethod = new MyWindowWithPrintMethod();
obj_MyWindowWithPrintMethod.Show();
}
private void btnCheckNewWindow_Click(object sender, RoutedEventArgs e)
{
WindowInteropHelper tgtWindow = new WindowInteropHelper(obj_MyWindowWithPrintMethod);
foreach (Window w in Application.Current.Windows)
{
// Compare Handle
WindowInteropHelper wih = new WindowInteropHelper(w);
if (wih.Handle == tgtWindow.Handle)
{
((MyWindowWithPrintMethod)w).Print();
}
// Compare Type
if (w.GetType() == typeof(MyWindowWithPrintMethod))
{
((MyWindowWithPrintMethod)w).Print();
}
}
}
MyWindowWithPrintMethod.cs
public class MyWindowWithPrintMethod : Window
{
public void Print()
{
MessageBox.Show("Print invoked !");
}
}
这个关于两个窗口事件的问题的答案可能会有所帮助:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Child childWindow = new Child();
childWindow.MyEvent += new EventHandler(childWindow_MyEvent);
childWindow.ShowDialog();
}
void childWindow_MyEvent(object sender, EventArgs e)
{
// handle event
MessageBox.Show("Handle");
}
}
子窗口
public partial class Child : Window
{
// define event
public event EventHandler MyEvent;
protected void OnMyEvent()
{
if (this.MyEvent != null)
this.MyEvent(this, EventArgs.Empty);
}
public Child()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Child_Loaded);
}
void Child_Loaded(object sender, RoutedEventArgs e)
{
// call event
this.OnMyEvent();
}
}
上面的代码显示了如何从一个窗口到另一个窗口设置事件。但是,您可能想要简单地调用另一个窗口中的方法。例如:
public void AddNewUser()
{
Window2 window = new Window2();
if (window.ShowDialog() == true)
{
// Update DataGrid
RefreshDataGrid();
}
}
如果您决定坚持使用事件,那么您应该阅读WPF路由事件。