winformsアプリケーションのwpfrichtextbox

Aug 20 2020

VBで記述されたWinFormsプロジェクトでWPFRichTextBoxを使用したい
1つのフォームとボタンでWinFormsプロジェクトを作成し
、新しいプロジェクトを追加しましたWPFユーザーコントロールライブラリは、
ElementHostの相互運用性を追加したWPFフォームにWPFRichTextBoxを配置しましたこれらのインポートを使用したWinForm

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

XAMLコードを投稿していませんそれを行う方法がわかりません

では、WPFフォームとRTBをWinFormsフォームにリンクするために次に何をすべきかという質問はありますか?
SQLiteDBからWPFRichTextBoxにデータをロードし、RTBに入力されたテキストをDBに保存したいと思います

回答

1 James_Duh Aug 21 2020 at 04:01

この回答は、@ KyleWangのすばらしい回答を拡張することを目的としています。WPFRichTextBoxの
Vectorsの選択に関する1つの大きな問題は、WPFRichTextBoxコントロールにTextプロパティがないことです。これがすべてのテキストを取り出す1つの方法です。つまり
、IMHOは、WPFプレーンTextBoxコントロールを使用することをお勧めします。ベクターは、タイトルバーでHotReloadを非表示にする方法についてもコメントしました。[ツール]> [オプション]> [デバッグ]> [一般]> [XAMLOK
コードの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
1 KyleWang Aug 20 2020 at 09:25

WinformsでWPFコントロールをホストするには、次の2つの方法を参照できます。

まず、両方ともElementHostフォームにコントロールを追加する必要があります。

解決策A:

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