2010-10-20 28 views
5

Tengo un problema con la herencia de control en WPF. Creé un UserControl llamado BaseUserControl. Quiero que este control sea un control base para otros controles de usuario de WPF. Entonces escribí otro UserControl llamado FirstComponent. En el siguiente paso he cambiado el códigowpf - Herencia de UserControl

FirstComponent : UserControl 

a este

FirstComponent : BaseControl 

Sin embargo durante la compilación consigo este error

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

¿Qué debo hacer para que FirstComponent derivar de BaseControl?

EDIT Gracias a abhishek respondí que heredé los controles. Howerver, tengo otra pregunta. En la clase base, especifiqué una propiedad public Grid _MainGrid {get; conjunto; }. Ahora quiero en mi clase derivada crear una instancia de esta grilla. Así que utilicé este código Howerver Aparece un error La propiedad '_MainGrid' no tiene ningún valor. Línea 8 Posición 36.

Respuesta

5

¿Has visto mi artículo completo?

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

espero que le ayudará en esto.

Si intenta ejecutar el proyecto, definitivamente arrojaría el error usted. Esto se debe a que cada ventana de WPF se crea desde el diseño baseWindow en lugar del diseño actual de la ventana. En otras palabras, si ve el XAML, verá que la etiqueta raíz es Ventana, que es una clase que es la principal de la ventana actual.

Por lo tanto, para garantizar que todo funcione a la perfección, necesitamos cambiar el Elemento Root .

Por lo que se vería así:

<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> 

Si ve este minuciosamente, se puede ver que he añadido un espacio de nombres para mi proyecto y lo nombró como local. Así BaseWindow debe provenir de BaseWindow y por lo tanto va como locales: BaseWindow

+0

Gracias que me ha ayudado mucho . Podrías mirar mi mensaje edigado – Berial

0

Bueno, el motivo del error inicial fue porque la clase era en realidad una clase parcial que fue la inclusión de una herencia base particular en otro lugar además de la ubicación donde cambiaste tu clase base.

cuanto a su propiedad 'herencia', sugiero tratando

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

    set 
    { 
     base.MainGrid = value; 
    } 
} 

Sin embargo debo señalar que esto no le dará un enlace a cualquier instancia (s) existente de su clase base. Si desea que exista un enlace garantizado en su clase derivada a la única instancia de esa Cuadrícula, tendrá que convertir la propiedad de la clase base en estática. En cuyo caso, su código se verá así ...

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

    set 
    { 
     BaseControl.MainGrid = value; 
    } 
} 
0

Cuando se especifica una clase base diferente para un control de usuario en los XAML.cs presentar

FirstComponent : BaseControl 

También debe cambiar esto en el 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> 
Cuestiones relacionadas