Pregunta

Estoy intentando crear un UserControl que hereda de una clase genérica. No se hereda directamente de una clase genérica, sino a través de una clase intermedia que no usa genéricos. Esto compila y funciona en tiempo de ejecución, pero recibo un error en tiempo de diseño.

Aquí está mi clase genérica para padres:

Public Class GenericParent(Of T)
    Inherits UserControl
End Class

Aquí está mi clase padre no genérica:

Public Class NonGenericParent
    Inherits GenericParent(Of String)
End Class

Aquí está mi XAML:

<local:NonGenericParent x:Class="SilverlightApplication5.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:SilverlightApplication5"
    Width="400" Height="300">
    <StackPanel>
        <Button Content="Hello"/>
    </StackPanel>
</local:NonGenericParent>

El analizador IntelliSense da los siguientes errores:

  1. La propiedad 'Ancho' no se encontró en el tipo 'NonGenericParent'.
  2. La propiedad 'Altura' no se encontró en el tipo 'NonGenericParent'.
  3. El tipo 'NonGenericParent' no admite contenido directo.

Es como si IntelliSense no puede ver el árbol de herencia más allá de la clase GenericParent. He intentado especificar ContentPropertyAttribute directamente en la clase SilverlightApplication5.Page, la clase NonGenericParent, y no funciona.

He leído que el atributo TypeArguments no es compatible con Silverlight 2.0. Es por eso que he creado la clase intermedia NonGenericParent.

Si alguien tiene alguna idea de cómo silenciar estos errores, estaría ansioso por escucharlos.

Actualización: Hemos abierto un ticket de soporte con MSFT, lo actualizaré con la solución que sea.

¿Fue útil?

Solución

Hemos recibido noticias de Microsoft de que no es probable que esto se solucione en futuras versiones. Después de que resolvieron el problema al tratar de encontrar al grupo responsable, parece que este problema pertenece a su grupo de desarrolladores de WPF, que es de donde proviene la respuesta "no lo voy a arreglar".

Mientras tanto, hemos actualizado nuestro código para eliminar los genéricos de las clases para padres hasta que suponga XAML 2009.

Otros consejos

No estoy seguro de Silverlight, pero esto se compila y se ejecuta como se espera en c #:


class GenericObject[T] : UserControl
{
}

class StaticObject : GenericObject[Int32]
{
    public Int32 wide { get { return this.Width; } }
}

private void Form1_Load(object sender, EventArgs e)
{
    StaticObject so = new StaticObject();
    this.Text = so.wide.ToString();
}

Entonces, si compila contra el clr, debería funcionar bien.

Podría ser solo un error inteligente, como estás sugiriendo. Normalmente, recomiendo no ignorar las advertencias de comiler, pero en este caso parece que la advertencia no es válida.

editar: los corchetes angulares sustituidos por corchetes causan que se los quiten.

A pesar de estar en 2.0 silverlight (y especialmente los ajustes de VS2008 para silverlight) todavía son muy jóvenes. Todavía hay peculiaridades en las cosas IDE.

¿Aún tiene el problema incluso después de una construcción exitosa?

Esta publicación de blog parece estar relacionada con tu problema:

http://blogs.msdn.com/b/wpfsldesigner/archive/2010/01/22/known-issue-controls-deriving-from-a- generic-base-class-must-be-in-separate-assembly.aspx

Para Silverlight parece que debes tener 3 clases para que esto funcione.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top