我搜索了很长时间,找不到这个问题的答案。这可能只是不知道要搜索什么的问题。是否可以为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
}
答案 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>