c# - Herencia con Silverlight User Control Partial Classes
multiple-inheritance partial-classes (1)
No se 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 de UserControl
:
public class FancyUserControl : UserControl
{
// Your added common functionality.
}
y luego agregue un nuevo UserControl
a su proyecto usando el mecanismo normal, digamos UserControl1
. Luego edite los archivos UserControl.xaml
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 ellas, ajustándose a su aplicación. A continuación, edite el archivo UserControl1.xaml.cs
la siguiente manera:
public partial class UserControl1 : FancyUserControl
{
public UserControl1()
{
InitializeComponent();
}
}
y Visual Studio no estará muy contento todavía, pero finalmente reconstruirá su proyecto y todo estará bien.
La clase UserControl1
se deriva ahora de FancyUserControl
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.
Estoy intentando permitir que varias clases hereden un control de usuario 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).
Tenga en cuenta que he heredado el control extendido en los archivos .cs y g.cs, pero continúo utilizando la etiqueta de control de usuario en el archivo .aspx ya que esto causa 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!