Question

J'essaie de créer un UserControl qui hérite d'une classe générique. Il n'hérite pas directement d'une classe générique, mais passe par une classe intermédiaire qui n'utilise pas de génériques. Cela compile et fonctionne au moment de l’exécution, mais j’obtiens une erreur lors de la conception.

Voici ma classe parent générique:

Public Class GenericParent(Of T)
    Inherits UserControl
End Class

Voici ma classe parent non générique:

Public Class NonGenericParent
    Inherits GenericParent(Of String)
End Class

Voici mon 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>

L'analyseur IntelliSense génère les erreurs suivantes:

  1. La propriété 'Largeur' est introuvable dans le type 'NonGenericParent'.
  2. La propriété 'Height' n'a pas été trouvée dans le type 'NonGenericParent'.
  3. Le type 'NonGenericParent' ne prend pas en charge le contenu direct.

C’est comme si IntelliSense ne pouvait pas voir l’arbre d’héritage après la classe GenericParent. J'ai essayé de spécifier ContentPropertyAttribute directement sur la classe SilverlightApplication5.Page, la classe NonGenericParent, et cela ne fonctionne pas.

J'ai lu que l'attribut TypeArguments n'est pas pris en charge dans Silverlight 2.0. C'est pourquoi j'ai créé la classe intermédiaire NonGenericParent.

Si quelqu'un a des idées sur la manière de faire taire ces erreurs, je serais impatient de les entendre.

Mise à jour : nous avons ouvert un ticket de support avec MSFT. Je vais le mettre à jour, quelle que soit leur solution.

Était-ce utile?

La solution

Microsoft nous a dit que cela ne serait probablement pas résolu dans les versions futures. Après avoir résolu le problème en essayant de trouver le groupe responsable, il semble que ce problème appartienne à leur groupe de développeurs WPF, d'où provient la réponse "ne va pas le réparer".

Entre-temps, nous avons mis à jour notre code pour extraire les génériques des classes parentes jusqu'à ce que je suppose que XAML 2009 soit disponible.

Autres conseils

Vous n'êtes pas sûr de Silverlight, mais cela compile et fonctionne comme prévu dans le 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();
}

Donc, si elle est compilée contre la commande, cela devrait fonctionner correctement.

Peut-être juste un bug d’intellisense comme vous le suggérez. Normalement, je vous déconseille d'ignorer les avertissements du comiler, mais dans ce cas, il semble que l'avertissement ne soit pas valide.

modifier: les chevrons remplacés par des chevrons ont été supprimés.

Malgré le fait qu’il soit à 2,0 silverlight (et particulièrement les ajustements de VS2008 pour silverlight), ils sont encore très jeunes. Il y a encore des problèmes dans l'IDE.

Avez-vous toujours le problème même après une construction réussie?

Ce billet de blog semble être lié à votre problème:

http://blogs.msdn.com/b/wpfsldesigner/archive/2010/01/22/known-issue-controls-deriving-from-a- classe de base générique doit être dans séparer assembly.aspx

Pour Silverlight, il semble que vous ayez besoin de 3 classes pour que cela fonctionne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top