2011-04-27 88 views
0

我无法调用基础构造在WPF窗口:呼叫构造

public class TemplateWindow : Window //Template window class 
{ 
    public TemplateWindow (int no) 
    { 
    } 
} 

public partial class MainView : TemplateWindow 
{ 
    public MainView() : base(1) //error here 
    { 
     InitializeComponent(); 
    } 
} 

它给了我一个错误在指示的位置,因为它显然试图调用与窗口构造取而代之。 MainView类是xaml窗口的代码。

但是,当我测试下面的问题时,它工作得很好。

class A //Base Class 
{ 
    public A() { } 
} 

class B : A 
{ 
    public B(int no) { } 
} 

partial class C : B 
{ 
    public C() : base(1) { } 
} 

我在做什么错?

+3

你应该张贴实际的错误,它给你。 – Gabe 2011-04-27 18:03:28

+1

同意w/Gabe;请发布您的堆栈跟踪。 – 2011-04-27 18:08:34

回答

1

你有你的MainView在XAML中定义的类,不是吗?它可能是这样的:

<Window x:Class="MyNamespace.MainView" ... > 
    ... 
</Window> 

请注意大的Window词在开头。它告诉编译器,你希望这个XAML生成一个名为MyNamespace.MainView的类,并且你希望它继承自Window。编译器就是这么做的:它很高兴地生成你的类并使它继承自Window。用鼠标右键单击InitializeComponent单词并选择“转到定义”。这会将您带到自动生成的文件中,并且您将能够看到该类。

现在,如果你想MainViewTemplateWindow继承,你只需要在你的XAML这么说:

<my:TemplateWindow 
    xmlns:my="MyNamespace" 
    x:Class="MyNamespace.MainView" ... > 
    ... 
</my:TemplateWindow> 

但是,这会给你另一个问题:现在,突然之间,你可以”不要使用视觉设计师。

这将是因为设计师无法创建TemplateWindow类的实例进行编辑。为什么?那么,因为TemplateWindow没有默认构造函数,当然!

因此,对于这种类型的工作,您只需要在TemplateWindow中定义两个构造函数 - 一个默认值,另一个接受int

祝你好运。

+0

是的,我现在看到我的问题。但我如何解决它? – 2011-04-27 18:15:43

+0

@Ying:请阅读我的编辑。 – 2011-04-27 18:16:18