Pergunta

Eu estou tentando criar um UserControl que herda de uma classe genérica. Não diretamente herdar de uma classe genérica, mas através de uma classe intermediária que não usa os genéricos. Isso compila e obras em tempo de execução, mas eu recebo um erro em tempo de design.

Aqui está minha classe pai genérico:

Public Class GenericParent(Of T)
    Inherits UserControl
End Class

Aqui está minha classe pai não-genérico:

Public Class NonGenericParent
    Inherits GenericParent(Of String)
End Class

Aqui está o meu 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>

O analisador IntelliSense dá os seguintes erros:

  1. A propriedade 'Largura' não foi encontrada no tipo 'NonGenericParent'.
  2. A propriedade 'Altura' não foi encontrado no tipo 'NonGenericParent'.
  3. O tipo 'NonGenericParent' não suporta conteúdo direto.

É como se IntelliSense não pode ver a árvore de herança passado a classe GenericParent. Eu tentei especificando o ContentPropertyAttribute diretamente sobre a classe SilverlightApplication5.Page, a classe NonGenericParent, e ele não funciona.

Eu li que o atributo TypeArguments não é suportado no Silverlight 2.0. É por isso que eu criei a classe NonGenericParent intermediária.

Se alguém tiver alguma idéia como para silenciar esses erros eu estaria ansioso para ouvi-los.

Update:. Abrimos um ticket de suporte com MSFT, eu vou atualizar isso com qualquer que seja a solução é

Foi útil?

Solução

Recebemos palavra da Microsoft que este não é susceptível de ser corrigido em versões futuras. Depois de terem saltado o problema em torno de tentar encontrar o grupo responsável, parece que este problema pertence ao seu grupo desenvolvedor WPF, que é onde o 'não vai corrigi-lo' resposta veio.

Enquanto isso, nós atualizamos nosso código para arrancar os genéricos das classes pai até que eu acho XAML de 2009.

Outras dicas

Não tenho certeza sobre o Silverlight, mas Isso compila e é executado conforme o esperado em 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();
}

Então, se ele compila contra o clr, deve funcionar muito bem.

Poderia ser apenas um bug intellisense como você está sugerindo. Normalmente eu aconselho ignorando advertências comiler, mas, neste caso, parece que a advertência não é válido.

EDIT: substituído colchetes com colchetes causa para despojado-los

.

Apesar de ser em 2,0 Silverlight (e, especialmente, as VS2008 ajustes para Silverlight) ainda são muito jovens. Há ainda estão peculiaridades no material IDE.

Você ainda tem o problema mesmo depois de uma compilação bem sucedida?

Este post parece estar relacionado com o problema:

http://blogs.msdn.com/b/wpfsldesigner/archive/2010/01/22/known-issue-controls-deriving-from-a- generic-base-class-deve-ser-em-separado-assembly.aspx

Para Silverlight parece que você deve ter 3 classes para que isso funcione.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top