两个窗口之间的WPF事件

本文关键字:之间 WPF 事件 窗口 两个 | 更新日期: 2023-09-27 18:09:46

谁能给我演示一下如何设置这样的逻辑:

我有一个WPF控件。当一个按钮被按下时,它会做两种可能的事情之一。

。它检查是否加载了不同的WPF窗口。如果是,它将触发该窗口的Print方法。B.它检查是否加载了不同的WPF窗口。如果不是,则实例化该窗口,然后触发其Print方法。

我很难理解两个WPF控件/Windows之间的事件系统。这对我来说是一件相对较新的事情,所以如果有人能告诉我这一点,我会很感激。

p。这不是家庭作业,而是我的一个新爱好。如果这是一个完全陌生的问题,那就给我指出一个资源,这样我就可以自学了。

干杯!

两个窗口之间的WPF事件

首先,您将如何检查新Window打开是否是您需要的?

你可以通过比较它们的HandleType (公共类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路由事件。