2010-10-20 3 views
5

У меня проблема с наследованием управления в WPF. Я создал UserControl с именем BaseUserControl. Я хочу, чтобы этот элемент управления был базовым элементом управления для других пользовательских контроллеров WPF. Поэтому я написал еще один UserControl под названием FirstComponent. В следующем шаге я изменил этот кодwpf - Наследование UserControl

FirstComponent : UserControl 

к этому

FirstComponent : BaseControl 

Однако во время компиляции я получаю эту ошибку

Partial declarations of 'controlinheritance.componenets.FirstComponent' must not specify different base classes 

Что я должен сделать, чтобы включить FirstComponent извлечь из BaseControl?

EDIT Благодаря абхишеку ответа мне удалось наследовать элементы управления. У меня еще один вопрос. В базовом классе я указал свойство public Grid _MainGrid {get; задавать; }. Теперь я хочу, чтобы в моем производном классе создавался экземпляр этой сетки. Поэтому я использовал этот код Howerver Я получаю сообщение об ошибке Свойство _MainGrid 'не имеет значения. Строка 8 Позиция 36.

ответ

5

Вы видите мою полную статью об этом?

http://www.dotnetfunda.com/articles/article832-define-base-class-for-window--usercontrol-.aspx

Я надеюсь, что это поможет вам в этом.

Если вы попытаетесь выполнить проект, это обязательно вызовет ошибку до . Это связано с тем, что каждое окно WPF создается из макета baseWindow вместо текущего макета окна. Другими словами, если вы видите XAML, вы увидите, что корневой тег - это Window, который является классом только родителем текущего окна.

Таким образом, чтобы убедиться, что все работает отлично, нам необходимо изменить корень Элемент.

Так это будет выглядеть так:

<local:BaseWindow Class="BaseWindowSample.Window1" 
        Name="winImp" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:BaseWindowSample" 
        Title="Window1"> 
... 
</local:BaseWindow> 

Если вы видите это сиюминутно, вы можете видеть, я добавил одно пространство имен для моего проекта и назвал его в качестве местных. Так BaseWindow должна исходить от BaseWindow и, таким образом, он идет как местные: BaseWindow

+0

Спасибо, что помогли мне , Не могли бы вы взглянуть на мое отредактированное сообщение – Berial

0

Ну причина для начальной ошибки было, потому что класс был на самом деле частичный класс, который перечислял определенную базу наследство где-то в дополнение к где вы изменили базовый класс.

Что касается вашего имущества «наследство», я предлагаю попробовать

public Grid MainGrid 
{ 
    get 
    { 
     return base.MainGrid; 
    } 

    set 
    { 
     base.MainGrid = value; 
    } 
} 

Однако следует отметить, что это не даст вам ссылку на любой существующий экземпляр (ы) базового класса. Если вы хотите, чтобы в вашем производном классе была гарантированная ссылка на одиночный экземпляр этой сетки, вам придется сделать свойство базового класса статичным. В этом случае ваш код будет выглядеть так ...

public Grid MainGrid 
{ 
    get 
    { 
     return BaseControl.MainGrid; 
    } 

    set 
    { 
     BaseControl.MainGrid = value; 
    } 
} 
0

При указании Different базовый класс для UserControl в XAML.cs файл

FirstComponent : BaseControl 

Вы также должны изменить это в XAML

<Base:BaseControl x:Class="FirstComponent" 
      xmlns:Base="clr-namespace:MyApplication.Base" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 


    </Grid> 
</Base:BaseControl> 
Смежные вопросы