UserControl que tem uma classe genérica em sua árvore de herança
-
03-07-2019 - |
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:
- A propriedade 'Largura' não foi encontrada no tipo 'NonGenericParent'.
- A propriedade 'Altura' não foi encontrado no tipo 'NonGenericParent'.
- 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 é
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:
Para Silverlight parece que você deve ter 3 classes para que isso funcione.