10

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

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

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

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

当我可以放置我希望能够从任何 wpf 页面使用的事件、属性、方法等时,有谁知道如何最好地创建一个基本页面?

4

5 回答 5

29

以下是我在当前项目中的做法。

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

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

然后我创建一个新页面并将其 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”中定义一堆自定义属性和事件,并在所有后代中使用它们。

于 2008-09-02T22:58:19.127 回答
4

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

于 2008-09-02T23:33:35.983 回答
2

我不确定这个,但是看看你的错误,我会尝试只用 c# (.cs) 代码定义基类 - 不要用 XAML 创建一个,只是一个扩展 WPF 页面的标准 .cs 文件班级。

于 2008-09-02T19:12:02.460 回答
2

这里也有教程!这非常简单易行。

于 2013-09-20T07:19:42.190 回答
1

小更新:我只是尝试这样做,但没有成功。他是我为了解决问题而改变的:

1.在很多论坛里,你会读到子页面必须继承自一个简单的cs类,没有XAML。虽然它有效。我确实从正常的 XAML 页面继承,没有任何问题。

2.我替换了以下代码:

<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"
/>

<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="using:Qaf.PigFM.WindowsClient"
/>

因为当我使用“clr-namespace”而不是“using”时,Intellisense 可以识别 PigFinderPage,但不能识别编译器。

于 2015-09-10T06:48:07.210 回答