Winforms 应用程序中的 wpf richtextbox

wpf richtextbox in winforms application

我想在使用 VB
编写的 WinForms 项目中使用 WPF RichTextBox 我用一个表单和一个按钮创建了 WinForms 项目
然后我添加了一个新项目 WPF 用户控件库在 WPF 窗体上放置了一个 WPF RichTextBox
我使用这些 Imports

向 WinForm 添加了 ElementHost 互操作性
Imports System
Imports System.Windows.Forms
Imports System.Windows.Forms.Integration

从这里我失去了一些 SO 问题是 10 到 7 岁的 MS 教程没有太大帮助
来自 WPF 表单的代码

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

我没有post XAML 代码不知道该怎么做

那么问题是 link 将带有 RTB 的 WPF 表单转换为 WinForms 表单?
我想将 SQLite 数据库中的数据加载到 WPF RichTextBox 中,并将在 RTB 中输入的文本保存到数据库中

在Winforms中托管一个WPF控件,可以参考以下两种方式

首先,他们都需要在表单中添加一个ElementHost控件。

方案一:

直接声明 wpf 控件(使用 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

方案B:

新建一个User Control(WPF)并编辑“UserControl1.xaml”中的内容如下。

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

然后修改'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

本回答是对@KyleWang精彩回答的补充
Vectors 选择 WPF RichTextBox 的一个大问题是 WPF RichTextBox 控件中没有文本 属性。这是获取所有文本的一种方法。那就是说我会恕我直言,建议使用 WPF Plain TextBox 控件
Vector 还评论了如何在标题栏中隐藏 HotReload 工具 > 选项 > 调试 > 常规 > un-check 为 XAML
启用 UI 调试工具 如果您决定在 WinForms 中使用 WPF 控件进行拼写检查,希望下面的代码对您有所帮助

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