带有自动卸载事件的自定义页面类

本文关键字:自定义 事件 卸载 | 更新日期: 2023-09-27 18:18:07

我们有一个相当大的Silverlight应用程序,我们需要给它添加一些额外的功能。该应用程序由一个框架元素和一个带超链接按钮的导航树视图组成。每个将被加载到主框架中的内容都是一个页面。

现在,我需要挂钩到每个页面的卸载事件。目前我们使用的是这样的:

/* PageX.xaml */
<navigation:Page
    x:Class="Foo.Views.PageX" 
    <!-- namespacing -->
    Title="Test Page X"
    Unloaded="Page_Unloaded">
    ...
</navigation:Page>

后台代码:

/* PageX.xaml.cs */
/* usings */
namespace Foo.Views
{
    public partial class PageX : Page
    {
        public PageX() {
            InitializeComponent();
        }
        private void Page_Unloaded(object sender, RoutedEventArgs e) {
            /* CODE */
        }
    }
}

这种方法需要在每个页面上实现,因为卸载方法中的代码保持完全相同…正如我前面提到的,我们有几个页面,创建一个自定义的Page类会更有用,这个Page_Unloaded()是直接实现的,这样我们就不需要改变每个页面。

你能告诉我如何创建这样一个自定义page类吗?

提前感谢任何帮助!!

亲切的问候!

带有自动卸载事件的自定义页面类

你可以创建一个Page基类,所有的页面都继承它,在构造函数中注册事件…

public class BasePage : Page
{
    public BasePage()
    {
        Unloaded += Page_Unloaded;
    }
    void Page_Unloaded(object sender, RoutedEventArgs e)
    {
    }
}

那么你所有的页面都可以继承…

public partial class Page1 : BasePage
{
    public Page1()
    {
        InitializeComponent();
    }
}

…在每个页面的xaml中…

<base:BasePage x:Class="WPFApp.Page1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:base="clr-namespace:WPFApp">
    <Grid>
    </Grid>
</base:BasePage>