2010-11-12 23 views
1

J'ai défini un FlowDocument dans une bibliothèque de contrôle WPF (Ajouter un nouvel élément ..., FlowDocument - est l'élément racine du fichier). J'ai l'intention de l'utiliser dans plusieurs contextes, comme dans un contrôle utilisateur ou sur une fenêtre, référencé dans le code pour la liaison de données et l'exportation vers xps, etc. Mais je n'arrive pas à trouver une référence à une instance de ce document. Il ne semble pas créer d'objet dans l'assemblage compilé.Comment faire référence à mon FlowDocument

Plus précisément, c'est mon problème

<MyUserControl ........ > 
    <FlowDocumentScrollViewer> 
    <!-- doesn't work --><namespaceRef:MyFlowDocument /> 
    <FlowDocumentScrollViewer> 
</MyUserControl> 

Répondre

2

La solution la plus simple est probablement de mettre votre FlowDocument dans une ressource de dictionnaire, puis utilisez le x: Key comme celui-ci

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <FlowDocument x:Key="myFlowDocument" ..> 
    </FlowDocument> 
</ResourceDictionary> 

<FlowDocumentScrollViewer Name="flowDocumentScrollViewer"> 
    <StaticResource ResourceKey="myFlowDocument"/> 
</FlowDocumentScrollViewer> 

Sinon, vous » Il faudra configurer le FlowDocument pour construire l'action Embedded Resource et le loder dans le code avec quelque chose comme ceci

Stream flowDocumentStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DocumentNameSpace.FlowDocumentName.xaml"); 
FlowDocument flowDocument = (FlowDocument)XamlReader.Load(flowDocumentStream); 
flowDocumentScrollViewer.Document = flowDocument; 

Mise à jour
Je pense qu'il peut être possible d'utiliser un objet ObjectDataProvider pour charger le FlowDocument si vous souhaitez l'examiner. Quoi qu'il en soit, un ResourceDictionary semble être la solution de facilité.

+0

Je suppose que c'est raisonnable ... mais dans ce cas, quel est le but de l'option de modèle "FlowDocument" dans la boîte de dialogue Ajouter un nouvel élément? Est-ce uniquement pour les ressources intégrées? – Clyde

+0

Oui, je me demande la même chose. Il y a peut-être un moyen d'y parvenir, mais je ne l'ai jamais vu. Peut-être que quelqu'un vous donnera une meilleure réponse sous peu :) –

+0

Voici quelques liens vers des questions similaires. http://www.netframeworkdev.com/windows-presentation-foundation-wpf/loading-a-flowdocument-into-a-richtextbox-in-xaml-87774.shtml http://stackoverflow.com/questions/897505/get-a-flowdocument-from-a-xaml-template-fichier –