wpf richtextbox dalam aplikasi winforms

Aug 20 2020

Saya ingin menggunakan WPF RichTextBox dalam proyek WinForms yang ditulis dengan VB
Saya telah membuat proyek WinForms dengan satu bentuk dan tombol
Saya kemudian menambahkan proyek baru Perpustakaan Kontrol Pengguna WPF menempatkan WPF RichTextBox pada formulir WPF
Saya menambahkan interoperabilitas ElementHost ke WinForm dengan Impor ini

Imports System
Imports System.Windows.Forms
Imports System.Windows.Forms.Integration

Dari sini saya tersesat beberapa pertanyaan SO yang berumur 10 sampai 7 tahun tutorial MS tidak banyak membantu
Kode dari Formulir WPF

Public Class UserControl1
  ReadOnly rtbWPF As New UserControl
  ElementHost
  wpfwindow.Show
End Class

Saya tidak memposting kode XAML TIDAK yakin bagaimana melakukan itu

Jadi pertanyaannya apa yang harus dilakukan selanjutnya untuk menautkan formulir WPF dengan RTB ke formulir WinForms?
Saya ingin memuat data dari SQLite DB ke WPF RichTextBox dan menyimpan teks yang dimasukkan di RTB ke dalam DB

Jawaban

1 James_Duh Aug 21 2020 at 04:01

Jawaban ini dimaksudkan untuk memperluas jawaban indah @KyleWang.
Satu masalah BESAR dengan pilihan Vektor dari WPF RichTextBox adalah Tidak ada properti Teks dalam kontrol WPF RichTextBox. Berikut adalah salah satu cara untuk mengeluarkan semua teks. Yang mengatakan saya akan IMHO akan menyarankan menggunakan kontrol WPF Plain TextBox
Vector juga berkomentar tentang cara menyembunyikan HotReload di bilah judul Alat> Opsi> Debugging> Umum> hapus centang Aktifkan Alat Debugging UI untuk XAML
OK Kode Di bawah ini harap ini membantu jika Anda memutuskan untuk menggunakan kontrol WPF di WinForms untuk pemeriksaan ejaan

Public Class frmStart

Dim rtb As Windows.Controls.RichTextBox = New Windows.Controls.RichTextBox()
Dim tb As Windows.Controls.TextBox = New Windows.Controls.TextBox()
Dim str As String = " "

Private Sub frmStart_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ElementHost1.Child = rtb
    rtb.SpellCheck.IsEnabled = True

    ElementHost2.Child = tb
    tb.SpellCheck.IsEnabled = True

    If str.Length < 100 Then
        rtb.VerticalScrollBarVisibility = Windows.Controls.ScrollBarVisibility.Visible
    End If
End Sub

Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
    str = "Plain WPF TxtBox"
    tb.Text = str
    rtb.AppendText("Heree is som mispelled txt se if the dictioary wrks more nonsense to see the scroll bar's will this word wrapp or is that rapp")
End Sub

Private Sub btnGet_Click(sender As Object, e As EventArgs) Handles btnGet.Click
    Dim elementHost = ElementHost1
    Dim wpfRichText = CType(elementHost.Child, Windows.Controls.RichTextBox)
    Dim range As Windows.Documents.TextRange = New Windows.Documents.TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd)
    Dim allText As String = range.Text
    tbMsg.Text = allText.ToString
End Sub

Private Sub btnGTB_Click(sender As Object, e As EventArgs) Handles btnGTB.Click
    Dim elementHost = ElementHost2
    Dim text = tb.Text
    tbMsg.Text = text.ToString
End Sub
1 KyleWang Aug 20 2020 at 09:25

Untuk menghosting kontrol WPF di Winforms, Anda dapat merujuk ke dua cara berikut.

Pertama, keduanya perlu menambahkan ElementHostkontrol ke dalam formulir.

Solusi A:

Secara langsung mendeklarasikan kontrol wpf (menggunakan Windows.Controls)

Dim rtb As Windows.Controls.RichTextBox = New Windows.Controls.RichTextBox()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    rtb.SpellCheck.IsEnabled = True
    ElementHost1.Child = rtb
End Sub

Solusi B:

Buat baru User Control(WPF)dan edit konten di "UserControl1.xaml" sebagai berikut.

<Grid>
    <RichTextBox x:Name="richtextbox" Foreground="Black" FontSize="24" Margin="0"></RichTextBox>
    <RichTextBox SpellCheck.IsEnabled="True" />
</Grid>

Kemudian ubah kode di 'form1.vb'

Private uc As UserControl1 = New UserControl1()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ElementHost1.Child = uc
End Sub