Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Memudahkan Pengikatan Data untuk Dokumen WPF RichTextBox?

Bagaimanakah Saya Boleh Memudahkan Pengikatan Data untuk Dokumen WPF RichTextBox?

Linda Hamilton
Lepaskan: 2025-01-08 08:27:44
asal
896 orang telah melayarinya

How Can I Simplify Data Binding for a WPF RichTextBox Document?

Penyelesaian dipermudahkan pengikatan data dokumen WPF RichTextBox

Apabila cuba melaksanakan pengikatan data untuk dokumen WPF RichTextBox, terdapat dua penyelesaian utama: buat kelas terbitan RichTextBox tersuai dengan sifat bergantung atau gunakan kaedah "proksi". Walau bagaimanapun, masih terdapat ruang untuk penambahbaikan dalam kaedah ini.

Penyelesaian dipermudah menggunakan atribut yang dilampirkan

Alternatif yang lebih mudah ialah mencipta atribut DocumentXaml tambahan. Sifat ini membenarkan pengikatan RichTextBox dengan mudah pada dokumen. Cara penggunaannya adalah seperti berikut:

<textbox text="{Binding FirstName}"></textbox><textbox text="{Binding LastName}"></textbox><richtextbox local:richtextboxhelper.documentxaml="{Binding Autobiography}"></richtextbox>
Salin selepas log masuk

Pencapaian

DocumentXamlPelaksanaan sifat yang dilampirkan berkisar pada memuatkan XAML (atau RTF) ke dalam FlowDocument baharu apabila menetapkan sifat tersebut. Sebaliknya, apabila FlowDocument berubah, nilai harta akan dikemas kini.

Kod berikut merangkumi pelaksanaan:

public class RichTextBoxHelper : DependencyObject
{
    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;

                // 将XAML解析为文档
                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()));
                    }
                };
            }
        });
}
Salin selepas log masuk

Kaedah ini menyediakan pilihan yang mudah untuk mengikat dokumen RichTextBox tanpa memerlukan penyelesaian yang rumit atau kawalan komersial.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memudahkan Pengikatan Data untuk Dokumen WPF RichTextBox?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan