2011-05-17 12 views
5

He creado un CustomControl para mi proyecto y voy a crear algunos más. Todos estos controles tendrán algo en común, así que creé una clase abstracta que hereda de UserControl.Base de datos personalizada para WPF-Control

Si creo un CustomControl a través de VisualStudio también hereda de UserControl y no puedo cambiar eso a mi UserControl abstracto porque VisualStudio agregará algunos archivos de código generados. No quiero meterme con estos archivos.

Pude simplemente crear un archivo de código vacío y escribir todo por mi cuenta, pero luego no puedo usar XAML (o aún no sé cómo).

Entonces, ¿cómo creo un CustomControl con una clase base personalizada sin perder XAML?

Respuesta

12

En primer lugar, no puede usar fácilmente clases abstractas en una jerarquía de clase UserControl; no funciona con el diseñador (obtendrá un mensaje "No se puede crear una instancia de" AbstractBase "). tienen el mismo problema, y ​​hubo algunas soluciones alternativas, todas las cuales fueron dolorosas.

Después de eliminar el "resumen", debería poder hacer referencia a su clase base incluyendo el espacio de nombres en su definición XAML y cambiando el código detrás de este modo:

<local:AbstractBase x:Class="Test.ConcreteControl" 
      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" 
      xmlns:local="clr-namespace:Test" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
    </Grid> 
</local:AbstractBase> 

Y:

/// <summary> 
    /// Interaction logic for ConcreteControl.xaml 
    /// </summary> 
    public partial class ConcreteControl : AbstractBase 
    { 
     public ConcreteControl() 
     { 
      InitializeComponent(); 
     } 
    } 

Esto supone que su clase base se llama "AbstractBase"

+0

Y no hay cambios en los archivos generados? –

+0

Creo que el generador de código solo creará campos que contendrán referencias a los elementos secundarios y el código de inicialización de agregar al método InitializeComponent(). – v00d00

+0

los archivos generados también se han cambiado a la forma heredada de AbstractBase automáticamente ... muchas gracias, micahtan –

Cuestiones relacionadas