winforms uygulamasında wpf richtextbox

Aug 20 2020

VB ile yazılmış bir WinForms projesinde bir WPF RichTextBox kullanmak istiyorum
WinForms projesini bir form ve bir düğme ile oluşturdum
daha sonra yeni bir proje ekledim WPF Kullanıcı Kontrol Kitaplığı WPF formuna bir WPF RichTextBox yerleştirdi
ElementHost birlikte çalışabilirliğini ekledim Bu İthalatlarla WinForm

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

Buradan SO sorusunun bir kısmını kaybettim 10 ila 7 yaşları arasında MS eğitimi çok fazla yardım değil
WPF Formundan Kod

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

XAML kodunu göndermedim, bunu nasıl yapacağımı bilmiyorum

Öyleyse, WPF formunu RTB ile WinForms formuna bağlamak için ne yapılması gerektiği sorusu?
Bir SQLite DB'den WPF RichTextBox'a veri yüklemek ve RTB'ye girilen metni DB'ye kaydetmek istiyorum

Yanıtlar

1 James_Duh Aug 21 2020 at 04:01

Bu yanıt, @KyleWang harika yanıtını genişletmek içindir.
WPF RichTextBox öğesinin Vektörler seçimiyle ilgili BÜYÜK bir sorun WPF RichTextBox denetiminde Metin özelliği yoktur. İşte tüm metni çıkarmanın bir yolu. Bununla birlikte
, IMHO'nun WPF Düz TextBox denetimini kullanmanızı önereceğimi söyledi.Vektör, HotReload'ın başlık çubuğunda nasıl gizleneceği hakkında da yorum yaptı Araçlar> Seçenekler> Hata Ayıklama> Genel> XAML için Kullanıcı Arabirimi Hata Ayıklama Araçlarını Etkinleştir
Tamam Kodunun işaretini kaldırın. WinForms'ta yazım denetimi için bir WPF denetimi kullanmaya karar verirseniz

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

Winforms'da bir WPF denetimini barındırmak için aşağıdaki iki yola başvurabilirsiniz.

İlk olarak, her ikisinin de ElementHostforma bir kontrol eklemesi gerekir .

Çözüm A:

Doğrudan wpf denetimlerini bildirin (Windows.Controls kullanarak)

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

Çözüm B:

Yeni bir tane oluşturun User Control(WPF)ve "UserControl1.xaml" içindeki içeriği aşağıdaki gibi düzenleyin.

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

Ardından 'form1.vb'deki kodu değiştirin.

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