如何在WPF中创建基页?

Sco*_*ttG 10 .net wpf

我已经决定所有的WPF页面都需要注册一个路由事件.而不是包括

public static readonly RoutedEvent MyEvent= EventManager.RegisterRoutedEvent("MyEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(BasePage));
Run Code Online (Sandbox Code Playgroud)

在每一页上,我决定创建一个基页(名为BasePage).我将上面的代码行放在我的基页中,然后将我的其他几个页面改为派生自BasePage.我无法通过这个错误:

错误12'CTS.iDocV7.BasePage'不能是XAML文件的根,因为它是使用XAML定义的.第1行位置22. C:\ Work\iDoc7\CTS.iDocV7\UI\Quality\QualityControlQueuePage.xaml 1 22 CTS.iDocV7

当我可以在任何wpf页面上放置我想要使用的事件,属性,方法等时,是否有人知道如何最好地创建基页?

Mat*_*ton 27

这是我在当前项目中完成此操作的方法.

首先我定义了一个类(正如@Daren Thomas所说 - 只是一个普通的旧C#类,没有相关的XAML文件),就像这样(是的,这是一个真正的类 - 最好不要问):

public class PigFinderPage : Page
{
    /* add custom events and properties here */
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个新的页面并将其XAML声明更改为:

<my:PigFinderPage x:Class="Qaf.PigFM.WindowsClient.PenSearchPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:Qaf.PigFM.WindowsClient"
    />
Run Code Online (Sandbox Code Playgroud)

所以我将它声明为"my"命名空间中的PigFinderPage.您需要使用类似的语法声明您需要的任何页面范围的资源:

<my:PigFinderPage.Resources>
    <!-- your resources go here -->
</my:PigFinderPage.Resources>
Run Code Online (Sandbox Code Playgroud)

最后,切换到这个新页面的代码隐藏,并更改其类声明,使其从您的自定义类派生,而不是直接从Page派生,如下所示:

public partial class EarmarkSearchPage : PigFinderPage
Run Code Online (Sandbox Code Playgroud)

请记住将其保留为部分类.

这对我有用 - 我可以在"PigFinderPage"中定义一堆自定义属性和事件,并在所有后代中使用它们.