“全局”事件处理程序

时间:2014-01-28 22:20:23

标签: c# wpf windows-phone-7 windows-phone-8

我搜索了很长时间,找不到这个问题的答案。这可能只是不知道要搜索什么的问题。是否可以为FrameworkElements提供“全局”处理程序?

例如:

第1页

<Grid x:Name="Grid1" Unloaded="GlobalHandler"/>

第2页

<Grid x:Name="Grid2" Unloaded="GlobalHandler"/>

全球经纪人?我在哪里可以存储此代码,以便它可用于两个网格?

private void GlobalHandler(object sender, RoutedEventArgs e)
{
    //Do something with grid here
}

2 个答案:

答案 0 :(得分:2)

使用相同的签名创建静态方法,然后在页面中,从各个处理程序中调用静态方法。

public class EventHandlerHelper
{
  public static GlobalUnload(object sender, RoutedEventArgs e)
  {
    // work
  }
}

public class Page1
{
   public void GlobalHandler(object sender, RoutedEventArgs e)
   {
      EventHandlerHelper.GlobalUnload(sender, e);
   }
}

public class Page2
{
   public void GlobalHandler(object sender, RoutedEventArgs e)
   {
      EventHandlerHelper.GlobalUnload(sender, e);
   }
}

答案 1 :(得分:2)

如果您想更多地使用XAML,您可以在EventSetter中为样式声明ResourceDictionary,并将所需的字词合并到Pages所需的字典中。

直到这个MSDN forum thread感谢用户Kevin Pan

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    x:Class="MyResource.MyResourceDictionary"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="Grid" x:Key="mycanvasstyle">
    <EventSetter Event="Unloaded"Handler="MyResourceDictionary_GlobalHandler"/>
    </Style>
</ResourceDictionary>

ResourceDictionary

的分部课程中
void MyResourceDictionary_GlobalHandler(object sender, MouseButtonEventArgs e)
{
    //Do something with grid here
}

然后将其添加到每个页面的XAML

<Page>
    <Page.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Dictionary1.xaml"></ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Page.Resources>

    <!-- rest of page -->

</Page>