2013-08-18 39 views
2

我写了这个代码在WPF:如何在WPF中创建Abstract类的System控件的实例?

System.Windows.Controls.Panel Panel1 = null; 
    Panel1 = new System.Windows.Controls.Panel(); 

但它说:

Error1 Cannot create an instance of the abstract class or interface 'System.Windows.Controls.Panel' 

如何解决这个问题?谁能回答我的问题吗?

+6

错误信息是正确的!您只是无法创建任何抽象类或接口的实例。你究竟在做什么? –

+0

@MitchWheat我想创建一个面板/ –

+0

什么类型的面板? –

回答

1

不能创建抽象类的实例看abstract keyword

您可以从抽象类派生,然后你可以将用户派生objces作为抽象类型,见polymorphisminheritance

+1

如果已经有这么多,我不认为有必要从'Panel'派生一个新类。 – Default

5

MSDN -

抽象类不能被实例化,并且通常是部分实现的 ,或根本没有实现。

如果您需要Panel,请创建一个派生自Panel的类的对象。最流行的是

  • 电网
  • DockPanel中
  • 的StackPanel
  • 帆布

完成从面板派生类可以发现here名单。

这将有助于你的目的 -

System.Windows.Controls.Panel Panel1 = new System.Windows.Controls.DockPanel(); 

但我认为你需要访问DockPanel中(和属性具体到DockPanel中)的Dock财产,所以你应该创建DockPanel中对象,而不是 -

System.Windows.Controls.DockPanel Panel1 = new System.Windows.Controls.DockPanel(); 
+0

您可以参考[这些](http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.aspx#inheritanceContinued) – Default

+0

已添加引用。谢谢。 –

+0

我的MainWindow.xaml中有DockPanelA。我定义了MVVM框架来编辑,删除和更新网格中的数据。我想在ViewModel类中创建新的PanelB,只要点击一个名为“New”的按钮。 PanelA会隐藏,PanelB应该占据Panle A的位置? –