wpf richtextbox dalam aplikasi winforms
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
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
Untuk menghosting kontrol WPF di Winforms, Anda dapat merujuk ke dua cara berikut.
Pertama, keduanya perlu menambahkan ElementHost
kontrol 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