如何在WPF中创建基本页面?

时间:2020-03-05 18:46:32  来源:igfitidea点击:

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

public static readonly RoutedEvent MyEvent= EventManager.RegisterRoutedEvent("MyEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(BasePage));

在每个页面上,我决定创建一个基础页面(名为BasePage)。我将上面的代码行放在我的基本页面中,然后更改了一些其他页面以从BasePage派生。我无法克服此错误:

Error 12  'CTS.iDocV7.BasePage' cannot
  be the root of a XAML file because it
  was defined using XAML. Line 1
  Position
  22.   C:\Work\iDoc7\CTS.iDocV7\UI\Quality\QualityControlQueuePage.xaml    1   22  CTS.iDocV7

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

解决方案

回答

我不确定这一点,但是看着错误,我会尝试仅使用c(.cs)代码定义基类,而不会使用XAML创建一个基类,而只是使用扩展了WPF Page类的标准.cs文件。

回答

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

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

public class PigFinderPage : Page
{
    /* add custom events and properties here */
}

然后,我创建一个新的Page并将其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"
    />

因此,我在"我的"名称空间中将其声明为PigFinderPage。我们需要使用相似的语法声明我们需要的所有页面范围资源:

<my:PigFinderPage.Resources>
    <!-- your resources go here -->
</my:PigFinderPage.Resources>

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

public partial class EarmarkSearchPage : PigFinderPage

请记住将其保留为局部类。

这对我来说是一种享受,我可以在" PigFinderPage"中定义一堆自定义属性和事件,并在所有后代中使用它们。

回答

另外,请查看添加事件,看看是否可以将事件添加到应用程序的每个页面中。比自定义中介类更容易。