wpf richtextbox w aplikacji winforms
Chciałbym użyć WPF RichTextBox w projekcie WinForms napisanym za pomocą VB
Utworzyłem projekt WinForms z jednym formularzem i przyciskiem
Następnie dodałem nowy projekt Biblioteka kontroli użytkownika WPF umieściła WPF RichTextBox na formularzu WPF
Dodałem współdziałanie ElementHost do WinForm z tymi importami
Imports System
Imports System.Windows.Forms
Imports System.Windows.Forms.Integration
Stąd zagubiłem niektóre pytania SO mają od 10 do 7 lat samouczek MS nie jest zbyt pomocny
Kod z formularza WPF
Public Class UserControl1
ReadOnly rtbWPF As New UserControl
ElementHost
wpfwindow.Show
End Class
Nie wysłałem kodu XAML NIE wiem, jak to zrobić
Więc pytanie, co zrobić dalej, aby połączyć formularz WPF z RTB do formularza WinForms?
Chciałbym załadować dane z SQLite DB do WPF RichTextBox i zapisać tekst wprowadzony w RTB do DB
Odpowiedzi
Ta odpowiedź ma na celu rozwinięcie @KyleWang wspaniałej odpowiedzi
Jeden DUŻY problem z wyborem wektorów WPF RichTextBox jest taki, że w kontrolce WPF RichTextBox nie ma właściwości Text. Oto jeden sposób na wyciągnięcie całego tekstu. To powiedziawszy, sugerowałbym IMHO użycie kontrolki WPF Plain TextBox
Vector również skomentował, jak ukryć HotReload na pasku tytułu Narzędzia> Opcje> Debugowanie> Ogólne> odznacz Włącz narzędzia debugowania interfejsu użytkownika dla
kodu XAML OK Poniżej mam nadzieję, że to jest pomocne jeśli zdecydujesz się użyć kontrolki WPF w WinForms do sprawdzania pisowni
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
Aby hostować formant WPF w Winforms, możesz skorzystać z następujących dwóch sposobów.
Najpierw obaj muszą dodać ElementHostkontrolkę do formularza.
Rozwiązanie A:
Bezpośrednio zadeklaruj kontrolki WPF (używając 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
Rozwiązanie B:
Utwórz nową User Control(WPF)i edytuj zawartość w „UserControl1.xaml” w następujący sposób.
<Grid>
<RichTextBox x:Name="richtextbox" Foreground="Black" FontSize="24" Margin="0"></RichTextBox>
<RichTextBox SpellCheck.IsEnabled="True" />
</Grid>
Następnie zmodyfikuj kod w „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