Question

en XAML fichier (WPF UserControl), est-il possible de faire référence à un "B" classe interne définie dans une autre classe "A"?

public class A
{
    public class B
    {
    }
}

Quelque chose comme:

<local:A.B ... />

Cette syntaxe ne fonctionne pas parce que « B » est interprété comme une propriété nommée « B » dans la classe « A ».

J'ai essayé syntaxes plus exotiques comme « :: » ou « + » mais aucun ne semble fonctionner.

Je suis actuellement en utilisant Silverlight 4 VS2010 .

Merci d'avance pour votre aide.

Était-ce utile?

La solution

je cherchais et la recherche, parce que je voudrais savoir si cela est possible,. Malheureusement, j'ai trouvé sur msdn:

  

Votre classe personnalisée ne doit pas être imbriquée   classe. et le cours emboîtés « dot »       dans leur syntaxe d'utilisation CLR générale interférer avec d'autres WPF et / ou XAML       les caractéristiques telles que les propriétés ci-jointes.

Alors, il semble que vous ne pouvez pas faire référence à une classe imbriquée avec l'opérateur point. Quant à d'autres façons de se rendre à cette classe intérieure par XAML, je ne l'ai pas encore eu de chance dans mes recherches. : O (Mais ceci est une question assez intéressante, donc je vais continuer à chercher peut-être que je vais trouver un peu de chance. O)

Autres conseils

Cette question est assez vieux, et je ne sais pas si elle aurait travaillé avec la version de retour WPF en 2010, mais maintenant vous pouvez le faire fonctionner en utilisant le nom « réel » (interne) du type imbriqué :

<local:A+B />

Si vous avez déjà regardé un code désassemblé, qui est comment les types imbriqués ressemblent:

ParentTypeName+Nested

. fait référence à une propriété ; ne sais pas pourquoi XAML ne pouvait rechercher aussi une classe imbriquée, mais il ne fonctionne pas.


Une classe imbriquée peut être représenté lorsque l'intérieur d'une chaîne (par exemple une valeur de propriété), en utilisant à la place de A+B A.B:

<Label SomeProperty1="{x:Static local:A+B.SomeProperty2}" />

En tant que nom de l'élément (comme indiqué en question), + n'est pas autorisé, car le résultat ne serait plus valide XML; + est pas un caractère de nom valide:
XAML XML .
XML Spec - NameChar .

Ainsi, le nom de l'élément ne peut pas décrire directement une classe imbriquée.
Mais voir ci-dessous MISE À JOUR -. Une syntaxe alternative qui permet de résoudre ce


UPDATE Par @ commentaire de Artfunkel sur une réponse, cela devrait être une solution [je ne l'ai pas testé]:

<x:Type TypeName="local:A+B"/>

De: https: / /docs.microsoft.com/en-us/dotnet/framework/xaml-services/x-type-markup-extension

à déterminer comment spécifier propriétés avec cette syntaxe. Utilisez x:TypeArguments?

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