2013-08-18 3 views
2

Я написал этот код в WPF:Как создать экземпляр абстрактного класса элементов управления системой в WPF?

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 как абстрактного типа, см polymorphism и inheritance

+1

Я не думаю, что есть необходимость вывести новый класс из «Панели», когда их уже так много. – Default

5

От MSDN -

Абстрактные классы не могут быть созданы, и часто либо частично реализованы, либо вообще не реализованы.

Если вам нужно Panel, создайте объект классов исходя из Panel. Наиболее популярными являются

  • Сетка
  • DockPanel
  • StackPanel
  • Холст

Полный список классов, вытекающих из панелей можно найти here.

Это будет служить вашей цели -

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

Но я думаю, что вам нужно, чтобы получить доступ Dock свойство DockPanel (и свойства, характерные для DockPanel), так что вы должны создать 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 для редактирования, удаления и обновления данных в сетке. Я хочу создать новую панель PanelB в моем классе ViewModel, всякий раз, когда будет нажата кнопка с именем «New». PanelA получит шкуру, а PanelB займет позицию Panle A? –