ホームページ > バックエンド開発 > C++ > WPF RichTextBox でのデータ バインディングを簡素化するにはどうすればよいですか?

WPF RichTextBox でのデータ バインディングを簡素化するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-08 08:37:45
オリジナル
500 人が閲覧しました

How Can I Simplify Data Binding in a WPF RichTextBox?

簡素化された WPF RichTextBox データ バインディング

WPF RichTextBox のデータ バインディングは難しい場合があります。ただし、もっと簡単な代替方法があります。

追加の DocumentXaml プロパティ

RichTextBox から継承する代わりに、DocumentXaml のドキュメント コンテンツに直接バインドできる追加の RichTextBox 属性を作成できます。実装は次のとおりです:

<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>
ログイン後にコピー

使用法:

<code class="language-xml"><TextBox Text="{Binding FirstName}"></TextBox>
<TextBox Text="{Binding LastName}"></TextBox>
<RichTextBox local:RichTextBoxHelper.DocumentXaml="{Binding Autobiography}"></RichTextBox></code>
ログイン後にコピー

この追加属性により、RichTextBox のドキュメントをデータ モデル プロパティに簡単にバインドできます。このコードは、XAML コンテンツを FlowDocument に解析し、ドキュメントが変更されたときにバインディングを更新します。

XamlPackage 形式の利点:

XAML パッケージ形式には、画像の組み込みや柔軟性の向上など、プレーン XAML に比べて利点があります。データ バインディングのニーズに応じて XamlPackage の使用を検討してください。

結論:

添付された DocumentXaml 属性を使用すると、WPF で RichTextBox のデータ バインディングを簡単に行うことができます。このソリューションを使用すると、RichTextBox コントロールのデータ バインディングのニーズが簡素化されます。

以上がWPF RichTextBox でのデータ バインディングを簡素化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート