winforms uygulamasında wpf richtextbox
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
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
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