Je peux vous donner un ok de la solution, et vous pouvez aller avec elle, mais avant que je le fais, je vais essayer d'expliquer pourquoi le Document n'est pas une DependencyProperty pour commencer.
Au cours de la durée de vie d'un contrôle RichTextBox, le Document de propriété en général ne change pas. Le RichTextBox est initialisé avec un FlowDocument. Ce document est affiché, vous pouvez modifier et de déformation dans beaucoup de façons, mais la valeur sous-jacente de la propriété de Document reste qu'une instance de l'FlowDocument. Par conséquent, il n'y a vraiment aucune raison pour que cela devrait être une Propriété de Dépendance, c'est à dire, pouvant être liés. Si vous avez plusieurs sites de référence
cette FlowDocument, vous avez seulement besoin de la référence une fois. Puisque c'est le même instance de partout, les modifications seront accessibles à tout le monde.
Je ne pense pas que FlowDocument document prend en charge les notifications de changement, même si je ne suis pas sûr.
Cela étant dit, voici une solution. Avant de commencer, depuis RichTextBox ne pas implémenter INotifyPropertyChanged et le Document n'est pas une propriété de dépendance, nous n'avons pas de notifications quand le RichTextBox du Document modifications de la propriété, de sorte que la liaison ne peut être Univoques.
Créer une classe qui va fournir la FlowDocument. Liaison nécessite l'existence d'une Dépendance de la Propriété, de sorte que cette classe hérite de DependencyObject.
class HasDocument : DependencyObject
{
public static readonly DependencyProperty DocumentProperty =
DependencyProperty.Register("Document",
typeof(FlowDocument),
typeof(HasDocument),
new PropertyMetadata(new PropertyChangedCallback(DocumentChanged)));
private static void DocumentChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
Debug.WriteLine("Document has changed");
}
public FlowDocument Document
{
get { return GetValue(DocumentProperty) as FlowDocument; }
set { SetValue(DocumentProperty, value); }
}
}
Créer une Fenêtre avec une zone de texte enrichi dans le code XAML.
<Window x:Class="samples.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Flow Document Binding" Height="300" Width="300"
>
<Grid>
<RichTextBox Name="richTextBox" />
</Grid>
</Window>
Donner la Fenêtre, un champ de type HasDocument.
HasDocument hasDocument;
Constructeur de fenêtre doit créer la liaison.
hasDocument = new HasDocument();
InitializeComponent();
Binding b = new Binding("Document");
b.Source = richTextBox;
b.Mode = BindingMode.OneWay;
BindingOperations.SetBinding(hasDocument, HasDocument.DocumentProperty, b);
Si vous voulez être en mesure de déclarer que la liaison en XAML, vous devez faire votre HasDocument classe de dérivés de FrameworkElement de sorte qu'il peut être inséré dans l'arborescence logique.
Maintenant, si vous modifiez la propriété de Document sur HasDocument, la riche zone de texte du Document va aussi changer.
FlowDocument d = new FlowDocument();
Paragraph g = new Paragraph();
Run a = new Run();
a.Text = "I showed this using a binding";
g.Inlines.Add(a);
d.Blocks.Add(g);
hasDocument.Document = d;