2009-08-02 7 views
15

J'ai une application WinForms fonctionnant sous .net 3.5. Cette application génère du code HTML à la volée, qui inclut le document complet, ainsi qu'une feuille de style CSS intégrée (à l'intérieur de l'élément head). J'utilise le contrôle WebBrowser et le paramètre browser.DocumentText pour mon code HTML généré, mais cela ne semble pas appliquer correctement les styles sur l'élément body (j'ai défini background-color sur # 000000 dans le CSS, mais le le fond est toujours blanc). Je me demande si a) il existe des alternatives pour rendre HTML relativement simple en C# (c'est-à-dire un moteur de rendu HTML complètement géré) ou b) quel serait le meilleur moyen de rendre HTML en utilisant le contrôle WebBrowser, y compris une gestion correcte -css et sans utiliser un fichier temporaire sur le disque dur.Meilleure façon de rendre HTML dans l'application WinForms?

Modifier: Le problème de non-application de CSS était un problème distinct. J'ai mis mon CSS actuel dans un bloc CDATA, ce qui semble l'empêcher de s'appliquer correctement. C'est maintenant fixé, mais la question elle-même est toujours valable.

+5

C'était stupide de fermer cette question simplement parce qu'elle contient le mot «meilleur» dans le titre! C'est une bonne question et ça m'a aidé. – Bitterblue

Répondre

3

Stay édité avec le WebBrowser intégré. Le HtmlRenderer de l'autre réponse est génial, mais rend une image.

+7

Le HtmlRenderer a été mis à jour depuis et prend maintenant en charge la sélection de texte, copier-coller, etc FYI. – Arthur

14

Pour le moteur de rendu HTML géré, voir HtmlRenderer sur GitHub.

+0

Maintenant que ça a l'air sexy, je vais essayer. –

+1

Il existe une version plus récente sur [CodePlex] (http://htmlrenderer.codeplex.com/) et il semble que le développement ait été déplacé vers ce point. Un super composant vraiment. – RoadBump

+0

Ceci est supérieur à WebBrowser interne, qui a un surcoût COM supplémentaire et ne joue pas bien avec le modèle d'appartement thread [Lire: je ne pouvais pas faire fonctionner WebBrowser quand il est lancé à partir d'un thread BackgroundWorker]. Et le composant est seulement 200K! –

0

Vous pourriez envisager d'utiliser un moteur de vue. La plupart des moteurs de vue peuvent travailler de manière api autonome

par exemple NHaml et NVelocity deux peuvent être utilisés autonome

http://code.google.com/p/nhaml/

http://www.castleproject.org/others/nvelocity/index.html

Et je suppose que Spark peut être aussi bien

http://dev.dejardin.org/

+0

Je ne pense pas que ceux-ci seront utiles - à ma connaissance, ils créent du HTML à partir d'un modèle. Je cherche quelque chose qui rend le HTML sur l'écran, aka. un navigateur. –

0

J'ai développé ce que vous demandiez: un "HTML complètement géré renderer", qui "rendre HTML relativement simple en C#". Il prend en charge un sous-ensemble de CSS, que vous pouvez "spécifier dans une feuille de style CSS inline (à l'intérieur de l'élément head)".

Pour plus de détails, voir the ModelText HTML control.

Questions connexes