处理来自不同窗口的相同事件

时间:2013-04-22 07:40:46

标签: wpf event-handling

我有一个带有两个窗口的WPF项目,第一个窗口触发事件并拥有自己的事件处理程序,另一个窗口将触发相同的事件,任何想法如何在第一个窗口中使用处理程序来处理第二个窗口中的事件? / p>

2 个答案:

答案 0 :(得分:1)

感谢@Cody Gray,@ keyboardP和这篇有用的文章http://geekswithblogs.net/lbugnion/archive/2007/03/02/107747.aspx

这是一段代码片段,用于演示答案:

第一步添加新的子类:

using System.Windows;

namespace WpfApplication
{
   public class Subclass : Window
   {
    //Event handlers,functions or any potential reused code
   }
}

第二步:转到window1.xaml.cs

namespace WpfApplication
{
     public partial class Window1 : Subclass
     {
       public Window1()
       {
          InitializeComponent();
       }
     }
}

第三步:更改window1的Xaml代码,如下所示:

<src:Subclass 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:src="clr-namespace:WpfApplication"
    Title="Window1" Height="350" Width="525">
 </src:Subclass>

最后做第二次&amp; window2的第3步

答案 1 :(得分:0)

我首先提出的一个简单的样本:

<Window x:Class="Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
    <Grid>
        <Window Loaded="Window_Loaded"/>
        <Window Loaded="Window_Loaded"/>
    </Grid>
</Window>

看看两个窗口如何共享事件处理程序:

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        //Whatever
    }
}

此时你应该问自己是否真的需要两个窗口,或者任何其他容器控制就足够了。