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