La création d'une instance d'une classe imbriquée dans le code XAML
dans un XAML fichier (WPF UserControl), est-il un moyen de faire référence à un intérieur de la classe "B" défini 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ée comme une propriété nommée "B" dans la classe "A".
J'ai essayé plus exotiques syntaxes comme les "::" ou "+", mais aucune ne semble fonctionner.
Je suis actuellement à l'aide Silverlight 4 avec VS2010.
Merci d'avance pour votre aide.
- est de classe B, un autre contrôle?
- Non, c'est une commande, mais pourraient l'être.
- Je suis pas très familier avec WPF commandant, dans la réponse à cette question, l'opérateur point est utilisé pour obtenir la commande: stackoverflow.com/questions/601393/custom-command-wpf Mais, les commandes sont définies dans une classe différente.
- Pour les entreprises commande c'est en effet l'approche standard, mais ma commande ici sont de l'INTERFACE utilisateur des commandes qui ne sont pas réutilisables dans un autre contexte que celui de mon actuel de l'INTERFACE utilisateur.
- Je crois que la réponse n'était pas identifié correctement. Voir mise à jour à ma question
- Ce n'est pas une réponse directe à la question, mais j'ai résolu un très liées problème: j'ai voulu passer à une classe imbriquée instance de
<d:Style.DataContext>
tag (exactement sansd:DesignInstance
extension de balisage parce que sinon VS designer montre des erreurs). Puis j'ai compris que je peux spécifier<x:Type Type="nmspc:A+B" />
à la place, et il sera trop de travail. Peut-être que ce sera utile pour quelqu'un. .
se réfère à une propriété; pas sûr pourquoi XAML ne pouvais pas également rechercher une classe imbriquée, mais il ne le fait pas. Une classe imbriquée peut être représentée de la à l'intérieur d'une chaîne de caractères (par exemple, la valeur d'une propriété), à l'aide de+
au lieu de.
. Comme un nom d'élément (comme indiqué dans la question),+
n'est pas permis, car le résultat ne serait plus valide XML;+
n'est pas un nom valide de caractère.
Vous devez vous connecter pour publier un commentaire.
J'étais à la recherche et à la recherche, parce que si c'est possible, je voudrais savoir. Malheureusement, j'ai trouvé ceci sur msdn:
Donc, il semble que vous ne pouvez pas faire référence à une classe imbriquée avec l'opérateur point. Comme pour d'autres moyens d'obtention de l'intérieur de la classe par le biais de XAML, je n'ai pas eu de chance dans mes recherches encore. :o( Mais c'est plutôt une question intéressante, je vais donc continuer à chercher. Je vais peut-être trouver un peu de chance! :o)
Cette question est assez vieux, et je ne sais pas si il aurait travaillé avec la version de WPF en 2010, mais maintenant vous pouvez le faire fonctionner à l'aide de la "vraie" (interne) nom de la imbriquée type:
Si vous avez déjà regardé un code désassemblé, c'est la façon dont les types imbriqués ressembler à:
{x:Type}
extension de balisage.+
n'est pas un nom valide de caractère..
se réfère à un propriété; pas sûr pourquoi XAML ne pouvais pas également rechercher une classe imbriquée, mais il ne le fait pas.Une classe imbriquée peut être représenté quand à l'intérieur d'une chaîne de (par exemple, la valeur d'une propriété), à l'aide de
A+B
au lieu deA.B
:Comme un nom d'élément (comme indiqué dans la question),
+
n'est pas permis, car le résultat ne serait plus valide XML;+
n'est pas un nom valide caractère:XAML est le XML.
XML Spec - NameChar.
De sorte que le nom de l'élément qui ne peut pas décrire une classe imbriquée.
MAIS voir la mise à JOUR ci-dessous - une syntaxe alternative qui permet de résoudre ce.
Mise à JOUR
Par @Artfunkel commentaire sur une seule réponse, ce devrait être une solution [je n'ai pas testé]:
À partir 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. Utilisation
x:TypeArguments
?