我决定我的所有 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 页面使用的事件、属性、方法等时如何最好地创建基本页面?

有帮助吗?

解决方案

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

首先,我定义了一个类(正如 @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”中定义一堆自定义属性和事件,并在所有后代中使用它们。

其他提示

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

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

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

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

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,但不能识别编译器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top