2012-08-29 135 views
3

是否有可能在C#的WPF工具箱(或其他任何WPF类)中扩展“Page”类? 什么我试图做的:扩展页面类

public class ExtendedPage : Page{ 
    protected void doStuff(){ 
     // lots of joy n pleasure 
    } 
} 

public partial class RandomWindow : ExtendedPage{ 
    private void randomMethod(){ 
     doStuff(); // causes error 
    } 
} 

我要求的原因是很明显的:扩展页级(ExtendedPage)后,子类(RandomWindow)没有查看在其基础的方法。 这个(至少这是我的猜测)是由于RandomWindow的局部性造成的。由于这个类不幸由WPF(指向相应的* .xaml的链接)生成,所以我无法找到部分类的其他部分。

这个问题可能会导致一个非常明显的答案,让我看起来像一个完全白痴,但我知道我无法弄清楚。我可能会补充说我刚开始使用C#,我的编程起源是Java。

确切的错误消息是“类型的部分声明”不能指定不同的基类“(CS0263)。

作为对其中一个注释的回应:* .xaml中的“Page”声明似乎生成一个代码隐藏文件,其基类是“Page”(而不是ExtendedPage)。改变这个似乎也不行,编译器抱怨找不到ExtendedPage类型。

<Page x:Class="...RandomWindow" ... /> 
// to 
<src:ExtendedPage x:class="...RandomWindow" 
xlmns:src="...ExtendedPage" /> 
+1

'部分“与它无关。你发布的内容应该可以正常工作,尽管你可能想尝试将它称为'base.doStuff()'。 – Oded

+0

告诉我们错误。 (也[这里](http://msdn.microsoft.com/en-us/library/ms229043.aspx)将是C#中的大写惯例) –

+0

也不管用,当然已经尝试过了。我猜测“部分”导致错误是基于以下知识:RandomWindow实际上是由WPF生成的类,链接到XAML - 并且extend-command在某种程度上被部分类的其他部分覆盖。 –

回答

3

“类型”的分部声明一定不能指定不同的基类

嗯,这一个是一个没有脑子,你可能有一个XAML的地方,看起来像这样:

<Page x:Class="MyApp.MyNamespace.RandomWindow" ....> 

作为基准隐含指定Page,但您需要:

<local:ExtendedPage x:Class="MyApp.MyNamespace.RandomWindow" 
        xmlns:local="clr-namespace:MyApp.NSContainingExtendedPage" 
        ...> 
+0

我真的认为这是解决方案,但编译器不断地告诉我,类型“local:ExtendedPage”不存在,并且每个程序集引用都必须是有效的 - 即使没有血腥的程序集引用。 –

+0

@ user1004816:看到我对你的问题的评论。 –

+0

好吧,我现在要打我的同事 - 他拼错了xmlns。谢谢,工作得很好。 –

0

延伸的页面级(ExtendedPage)后,将子类 (RandomWindow)不具有存取权限其基部

这是错误的方法。如果可能的话,扩展一个类,使您可以访问基类的所有publicprotected成员。

部分仅涉及不同文件中的类代码的destribution,但没有任何与它的编译后实际 presentatioon。编译后,它成为一个单一的和坚实的类型。

你在这里发布的内容应该可以正常工作。

+0

我知道它是什么_supposed_工作 - 但它不。我刚刚在原始问题中添加了确切的错误。 –

+1

@ user1004816:你可能跳入类型陷阱,如在这个问题中接受的答案中所述:[部分声明,不能指定不同的基类](http://stackoverflow.com/questions/12039970/partial-declarations-必须 - 不指定,不同的基类)。请看看 – Tigran

+0

这可能是原因。不幸的是,我没有实施解决方法。我会将xaml-change添加到我的问题中。 –