wpf richtextbox trong ứng dụng winforms
Tôi muốn sử dụng WPF RichTextBox trong dự án WinForms được viết bằng VB
Tôi đã tạo dự án WinForms với một biểu mẫu và một nút
. Sau đó, tôi đã thêm một dự án mới Thư viện điều khiển người dùng WPF đã đặt một WPF RichTextBox trên biểu mẫu WPF.
Tôi đã thêm khả năng tương tác ElementHost vào WinForm với những Nhập này
Imports System
Imports System.Windows.Forms
Imports System.Windows.Forms.Integration
Từ đây tôi bị mất một số câu hỏi SO là 10 đến 7 tuổi, hướng dẫn MS không giúp được nhiều
Mã từ WPF Form
Public Class UserControl1
ReadOnly rtbWPF As New UserControl
ElementHost
wpfwindow.Show
End Class
Tôi đã không đăng mã XAML KHÔNG chắc chắn cách thực hiện điều đó
Vì vậy, câu hỏi phải làm gì tiếp theo để liên kết biểu mẫu WPF với RTB thành biểu mẫu WinForms?
Tôi muốn tải dữ liệu từ SQLite DB vào WPF RichTextBox và lưu văn bản đã nhập trong RTB vào DB
Trả lời
Câu trả lời này có nghĩa là để mở rộng câu trả lời tuyệt vời của @KyleWang
Một vấn đề LỚN với lựa chọn Vectors của WPF RichTextBox là Không có thuộc tính Văn bản trong điều khiển WPF RichTextBox. Đây là một cách để lấy tất cả văn bản ra. Điều đó nói rằng tôi sẽ IMHO đề xuất sử dụng WPF Plain TextBox Control
Vector cũng đã nhận xét về cách ẩn HotReload trong thanh tiêu đề Công cụ> Tùy chọn> Gỡ lỗi> Chung> bỏ chọn Bật công cụ gỡ lỗi giao diện người dùng cho XAML
Mã OK Dưới đây hy vọng điều này hữu ích nếu bạn quyết định sử dụng điều khiển WPF trong WinForms để kiểm tra chính tả
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
Để lưu trữ một điều khiển WPF trong Winforms, bạn có thể tham khảo hai cách sau.
Đầu tiên, cả hai đều cần thêm một ElementHostđiều khiển vào biểu mẫu.
Giải pháp A:
Khai báo trực tiếp các điều khiển wpf (sử dụng 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
Giải pháp B:
Tạo mới User Control(WPF)và chỉnh sửa nội dung trong "UserControl1.xaml" như sau.
<Grid>
<RichTextBox x:Name="richtextbox" Foreground="Black" FontSize="24" Margin="0"></RichTextBox>
<RichTextBox SpellCheck.IsEnabled="True" />
</Grid>
Sau đó sửa đổi mã trong '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