J'ai une application où j'utilise XAML pour représenter mon propre graphique d'objet personnalisé. C'est assez différent du modèle d'objet WPF / Silverlight (et non utilisé pour la conception de l'UI), mais il est possible de visualiser le graphique d'objet de manière significative. Ce que j'aimerais faire, c'est ajouter une extension de designer à Visual Studio pour visualiser mes objets spécifiques, mais j'ai eu du mal à trouver des informations sur ce sujet. Quelqu'un pourrait-il me dire dans la bonne direction? P>
Mon objectif principal est d'avoir un retour visuel simple de la XAML actuel; Je ne suis pas encore à un point où j'ai besoin du concepteur pour soutenir l'édition visuelle. Si quelqu'un est curieux, c'est un outil de simulation de machines industrielles; J'utilise XAML pour définir les composants de la machine et leurs connexions, mais je dois actuellement exécuter la simulation complète pour voir à quoi ressemble la machine. P>
3 Réponses :
Vous devez créer une extension Visual Studio (VSIX) qui analyse le fichier et visualise le contenu. Vous avez deux options, un studio visuel Ajouter ou un package Visual Studio (voir les détails des différences de question 1139294 ). Le premier est légèrement plus facile à commencer, mais ce dernier vous donnera plus de contrôle afin que je recommande Si vous avez édité à l'esprit à l'avenir. p>
Commencez par télécharger SDK pour la création d'Extensions Visual Studio, aka Visual Studio 2010 SP1 SDK . Pour l'ancienne version non SP1, cliquez sur ici . p>
Vous devez vous familiariser avec la création de packages Visual Studio. Pour un didacticiel Microsoft, voir Procédure pas à pas: créer un vspackage . Si vous suivez le tutoriel, vous devriez avoir tout besoin de déclencher un composant personnalisé à partir d'une commande de menu. Alors maintenant tout ce que vous avez vraiment besoin est un par exemple. Un composant WPF normal pouvant analyser / visualiser votre XAML personnalisé. Vous devez probablement probablement associer votre filetype personnalisé avec votre composant. Pour cela, vous avez besoin d'un FreeDeDeLexTUXTRUTTRibute . P>
Il n'y a rien comme un échantillon, voir L'exemple de l'EDI Editeur à partir du Library d'échantillons . Cela crée un petit éditeur de fichiers Types de fichiers personnalisés, qui est proche de ce que vous demandez. Remplacez le composant Editeur de fichier et le type de fichier associé avec votre éditeur et vous êtes presque terminé! p>
Merci, cela vous aide à me diriger dans la bonne direction. Mon cas est légèrement différent (comme je n'ai pas de format de fichier personnalisé; il est toujours une extension * .xaml et compile toujours à une classe, avec un fichier de code de support, tout comme n'importe quelle autre classe XAML.) Toutefois, c'est toujours plutôt utile.
Oui, il est intéressant de noter que - dans un projet Silverlight, vs sait de rendre l'origine .xaml d'une manière .xaml, et dans un projet WPF vs sait de le rendre autre moyen - peut-être qu'il y a une magie de modèle de projet que vous pouvez également faire aussi pour spécifier " Pour le projet Type-X Utilisez Ce concepteur i> pour XAML ", etc ...
Voir également ce qui suit, http: //code.msdn .microsoft.com / WindowsDesktop / Designer-View-Over-XML-20A81F17 , pour un bon exemple de ce que vous voulez. P>
FEDXMLEDORDORCHOOSERDESIGIELERVIEWTRIBUT est ce que vous recherchez, bien que ce soit un peu bizarre comment vous devez le faire pour le faire fonctionner de cette manière. https://msdn.microsoft.com/ FR-US / Bibliothèque / Microsoft.Visualstudio.Modeling.shell.providexMleditorChooserdesignerviefattribute_properties.aspx
Je viens de recevoir ce travail dans ma propre extension, et c'est super facile (une fois que vous avez la formule magique). Travailler à partir de l'échantillon d'extensibilité vs "Editeur avec la boîte à outils" ( HTTPS: // github.com/microsoft/vssdk-extability-samples/tree/master/editor_with_toolbox ), procédez comme suit: p>
Ouvrez la rédaction de l'éditeur.cs et supprimez les attributs de fournisseur de fournisseurs et de fournisseurs. Remplacez-les par ces attributs (remplacez évidemment les cordes de bout avec vos chaînes réelles). P>
string extension = System.IO.Path.GetExtension(pszMkDocument); if (extension.Equals(".xaml", StringComparison.OrdinalIgnoreCase)) { using (System.Xml.XmlReader reader = System.Xml.XmlReader.Create(pszMkDocument)) { reader.MoveToContent(); if (reader.NodeType == System.Xml.XmlNodeType.Element) { if (reader.NamespaceURI.Equals("YourNamespace", StringComparison.OrdinalIgnoreCase)) { EditorPane newEditor = new EditorPane(); ppunkDocView = Marshal.GetIUnknownForObject(newEditor); ppunkDocData = Marshal.GetIUnknownForObject(newEditor); pbstrEditorCaption = ""; return VSConstants.S_OK; } } } } return VSConstants.VS_E_UNSUPPORTEDFORMAT;
Ouvrez la mesure de l'éditeur.cs et modifiez la méthode CreateDeDitorInstance. Ici, vous ouvrirez le fichier .xaml spécifié par le paramètre PSZMKDocument FilePath et vérifiez qu'il s'agit de l'un des vôtres (par exemple, il utilise votre schéma ou quelque chose). Si tel est le cas, émettez vos Guids de modification de la modification de modification et retour S_OK. Sinon (par exemple, s'il s'agit d'un fichier WPF .xaml), Sortie GUID.empty et retour VS_E_UNSUPPORTEDFORMAT. P>
[ProvideXmlEditorChooserDesignerView("UnimportantDesignerViewName", "xaml", LogicalViewID.Designer, 10000, DesignerLogicalViewEditor = typeof(EditorFactory), Namespace = "YourNamespace", MatchExtensionAndNamespace = true)] [ProvideXmlEditorChooserDesignerView("UnimportantDesignerViewName_Enforced", "xaml", LogicalViewID.Designer, 10001, DesignerLogicalViewEditor = typeof(EditorFactory))] [ProvideEditorLogicalView(typeof(EditorFactory), LogicalViewID.TextView)] [ProvideEditorLogicalView(typeof(EditorFactory), LogicalViewID.Code)] [ProvideEditorLogicalView(typeof(EditorFactory), LogicalViewID.Designer)] [ProvideEditorLogicalView(typeof(EditorFactory), LogicalViewID.Debugging)]