Liaison de données WPF RichTextBox simplifiée
La liaison de données pour WPF RichTextBox
peut être délicate. Il existe cependant une alternative plus simple.
Propriétés DocumentXaml supplémentaires
Au lieu d'hériter de RichTextBox
, vous pouvez créer un attribut DocumentXaml
supplémentaire qui vous permet de vous lier directement au contenu du document de RichTextBox
. La mise en œuvre est la suivante :
<code class="language-csharp">public static class RichTextBoxHelper { public static string GetDocumentXaml(DependencyObject obj) => (string)obj.GetValue(DocumentXamlProperty); public static void SetDocumentXaml(DependencyObject obj, string value) => obj.SetValue(DocumentXamlProperty, value); public static readonly DependencyProperty DocumentXamlProperty = DependencyProperty.RegisterAttached( "DocumentXaml", typeof(string), typeof(RichTextBoxHelper), new FrameworkPropertyMetadata { BindsTwoWayByDefault = true, PropertyChangedCallback = (obj, e) => { var richTextBox = (RichTextBox)obj; var doc = new FlowDocument(); var xaml = GetDocumentXaml(richTextBox); var range = new TextRange(doc.ContentStart, doc.ContentEnd); range.Load(new MemoryStream(Encoding.UTF8.GetBytes(xaml)), DataFormats.Xaml); richTextBox.Document = doc; range.Changed += (obj2, e2) => { if (richTextBox.Document == doc) { using var buffer = new MemoryStream(); range.Save(buffer, DataFormats.Xaml); SetDocumentXaml(richTextBox, Encoding.UTF8.GetString(buffer.ToArray())); } }; } }); }</code>
Utilisation :
<code class="language-xml"><TextBox Text="{Binding FirstName}"></TextBox> <TextBox Text="{Binding LastName}"></TextBox> <RichTextBox local:RichTextBoxHelper.DocumentXaml="{Binding Autobiography}"></RichTextBox></code>
Cet attribut supplémentaire vous permet de lier facilement le document de RichTextBox
à une propriété de modèle de données. Le code gère l'analyse du contenu XAML dans FlowDocument
et la mise à jour de la liaison lorsque le document change.
Avantages du format XamlPackage :
Le format de package XAML présente des avantages par rapport au XAML simple, tels que l'inclusion d'images et une plus grande flexibilité. Pensez à utiliser XamlPackage pour vos besoins de liaison de données.
Conclusion :
L'utilisation de l'attribut DocumentXaml
ci-joint fournit un moyen simple d'effectuer la liaison de données de RichTextBox
dans WPF. Simplifiez les besoins de liaison de données de votre contrôle RichTextBox
avec cette solution.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!