6

Estoy intentando permitir que varias clases hereden un control de usuario de Silverlight más general para evitar la redundancia en mi código. Las clases heredan el control extendido, que luego hereda la clase de Control de usuario. El problema con el que me he encontrado es que el archivo ExtendedControlExtension.g.cs se regenera cada vez que compilo, con la herencia incorrecta (hereda el control de usuario, no mi control extendido).Herencia con Silverlight Clases parciales de control de usuario

Tenga en cuenta que he estado heredar el control extendido en los archivos .cs y g.cs, pero continuar el uso de la etiqueta de control de usuario en el archivo .aspx ya que esto hace que el error

Error 29 La etiqueta ' ExtendedControl 'no existe en el espacio de nombres XML' http://schemas.microsoft.com/winfx/2006/xaml/presentation '.

¿Hay alguna manera de arreglar esto?

Gracias!

Respuesta

9

No puede cambiar el archivo .g.cs, de hecho se dice tan a la derecha en el archivo. Además, es desafortunado usar el término "control personalizado" ya que esto significa algo específico y no lo que estás tratando de hacer. Pero, la buena noticia es que lo que estás tratando de hacer es posible.

Derivar UserControl:

public class FancyUserControl : UserControl 
{ 
    // Your added common functionality. 
} 

y luego añadir un nuevo UserControl a su proyecto mediante el mecanismo normal, digamos UserControl1. A continuación, edite los archivos UserControl.xaml de la siguiente manera:

<local:FancyUserControl x:Class="SilverlightApplication1.UserControl1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:SilverlightApplication1" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid x:Name="LayoutRoot" Background="White"> 

    </Grid> 
</local:FancyUserControl> 

prestando especial atención a las tres líneas con local en ellos, para adaptarse a su aplicación. A continuación, edite el archivo UserControl1.xaml.cs de la siguiente manera:

public partial class UserControl1 : FancyUserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 
    } 
} 

y Visual Studio no será muy feliz todavía, pero finalmente reconstruir su proyecto y todo estará bien.

La clase UserControl1 ahora se deriva de FancyUserControl en lugar de UserControl y puede comenzar a agregar su funcionalidad común. Para agregar más controles necesitará editar manualmente el XAML y el código subyacente una vez después de agregar inicialmente cada nuevo control al proyecto.

+0

Gracias por la respuesta muy completa (y entiendo que no se supone que debas editar los archivos .gs, pero era la única manera que podía encontrar para lograr la funcionalidad que necesitaba hasta que respondiste la pregunta). – badpanda

+0

+1 Una respuesta bien construida. – AnthonyWJones