添付プロパティを使用した WPF RichTextBox データ バインディングの簡素化
WPF RichTextBox のデータ バインディングは、開発者にとって常に課題でした。一般的な 2 つのアプローチには、RichTextBox をサブクラス化し、DependencyProperty を追加する方法と、「プロキシ」を使用する方法があります。ただし、どちらの方法にも欠点があります。
より簡単な解決策: 追加の DocumentXaml プロパティ
これらの制限を克服する簡単な方法は、追加の DocumentXaml プロパティを作成することです。このプロパティを使用すると、RichTextBox をドキュメントに直接バインドできます。
使用法:
<code class="language-xml"><TextBox Text="{Binding FirstName}"></TextBox> <TextBox Text="{Binding LastName}"></TextBox> <RichTextBox local:RichTextBoxHelper.DocumentXaml="{Binding Autobiography}"></RichTextBox></code>
実装の詳細:
実装プロセスには、DocumentXaml プロパティが変更されたときに RichTextBox のドキュメントを更新することが含まれます。コードは次のとおりです:
<code class="language-csharp">public class RichTextBoxHelper : DependencyObject { public static string GetDocumentXaml(DependencyObject obj) { return (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; // 将XAML解析为文档并将其设置为RichTextBox var doc = new FlowDocument(); var range = new TextRange(doc.ContentStart, doc.ContentEnd); range.Load(new MemoryStream(Encoding.UTF8.GetBytes(GetDocumentXaml(richTextBox))), DataFormats.Xaml); richTextBox.Document = doc; // 文档更改时更新源 range.Changed += (obj2, e2) => { if (richTextBox.Document == doc) { MemoryStream buffer = new MemoryStream(); range.Save(buffer, DataFormats.Xaml); SetDocumentXaml(richTextBox, Encoding.UTF8.GetString(buffer.ToArray())); } }; } }); }</code>
代替形式:
同じメソッドを TextFormats.RTF または TextFormats.XamlPackage で使用できます。 XamlPackage の場合、DocumentXaml プロパティの型は文字列ではなく byte[] になります。
XamlPackage 形式の利点:
XamlPackage には、純粋な XAML と比較して画像が埋め込まれ、使いやすいという利点があります。
結論:
この追加の DocumentXaml プロパティは、他のメソッドの制限を克服して、RichTextBox でのデータ バインディングに対するシンプルかつ効果的なソリューションを提供します。ドキュメントへの直接バインドが可能になり、テキストの書式設定機能がサポートされます。
以上が添付プロパティを使用して WPF RichTextBox データ バインディングを簡素化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。