我已经决定所有的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页面上放置我想要使用的事件,属性,方法等时,是否有人知道如何最好地创建基页?
答案 0 :(得分:25)
以下是我在当前项目中的表现。
首先我定义了一个类(正如@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"
/>
所以我将它声明为“my”命名空间中的PigFinderPage。您需要的任何页面范围资源都必须使用类似的语法声明:
<my:PigFinderPage.Resources>
<!-- your resources go here -->
</my:PigFinderPage.Resources>
最后,切换到这个新页面的代码隐藏,并更改其类声明,使其从您的自定义类派生,而不是直接从Page派生,如下所示:
public partial class EarmarkSearchPage : PigFinderPage
请记住将其保留为部分课程。
这对我有用 - 我可以在“PigFinderPage”中定义一堆自定义属性和事件,并在所有后代中使用它们。
答案 1 :(得分:4)
另外,请查看Attached Events,看看您是否可以将活动附加到应用中的每个网页。可能比自定义中介类更容易。
答案 2 :(得分:2)
我不确定这个,但是看看你的错误,我会尝试用c#(。cs)代码定义基类 - 不要用XAML创建一个,只是扩展的标准.cs文件WPF页面类。
答案 3 :(得分:2)
Here也是一个教程! 它非常简单易用。