2008-10-06 7 views
2

Est-ce que quelqu'un a trouvé un moyen d'enregistrer un FlowDocument en tant que BAML ou autre format compressé? Je peux importer XML avec des images pour créer une nouvelle FlowDocument:Puis-je enregistrer un FlowDocument en BAML de manière programmatique?

<TextRange class instance>.Load(fs, DataFormats.Rtf) 

Cependant, je n'ai pas trouvé une bonne façon de l'enregistrer dans un « natif » format compressé. Décompressé XAML est facile de générer en utilisant:

<TextRange class instance>.Save(fs, DataFormats.Xaml); 

Mais est-il une méthode de programmation pour l'enregistrer dans un format compressé?

S'il n'existe pas de méthode existante, quelqu'un sait-il où trouver un compilateur XAML programmatique? Ou même seulement les spécifications BAML? Je pourrais générer par programme une fenêtre XAML entière avec le FlowDocument incorporé, mais je voudrais toujours convertir le XAML en BAML pour des temps de chargement plus rapides. J'utilise des documents rtf relativement volumineux et le temps de conversion en utilisant DataFormats.Rtf est significatif.

Répondre

1

Je ne pense pas que ce soit possible ... Le BamlWriter est marqué comme interne, cela devrait ouvrir bientôt!

Je ne sais pas unfortunatly de tous les compilateurs XAML

0

Eh bien, il se trouve que vous pouvez exécuter Visual C# 2008 Express w/o l'interface graphique. Et vous pouvez modifier le nom du programme final par code avant de compiler aussi bien. Je suis sûr que vous pouvez le faire via les API, mais voici le hack que j'ai trouvé:

  1. Le nom du programme est déterminé dans .csproj, dans la balise xml.
  2. exécution via le code ou d'un fichier batch: "\ Common7 \ IDE \ vcsexpress" ".sln"/reconstruction Release/projectconfig Release/out errors.txt

J'aime examiner et supprimer le errors.txt après chaque passage pour le rendre plus facile de voir si j'ai une construction propre. Ce n'est pas idéal car vous devez avoir une version complète de Visual C# 2008 achetée sur chaque machine que vous utilisez de cette façon, mais c'est un moyen de créer un nouvel exécutable pour afficher chaque document de manière programmée. En outre, si vous avez une erreur dans votre code XAML, vous pouvez générer un programme qui ne fonctionnera pas.

Notez que le format BAML ne compresse pas le texte, seulement les balises et autres 'plomberie'. Même les informations Margin et Padding sont sauvegardées en ASCII clair. Ceci est hérité par la fin .exe laissant le texte clairement visible dans les sections à bloc-notes ou similaire.

0

Le format XamlPackage est compressé:

<TextRange class instance>.Save(fs, DataFormats.Xaml);