从C#中的Winforms上的elementhost中托管的RichText wpf控件获取文本

时间:2017-09-20 12:04:40

标签: c# .net winforms wpf-controls elementhost

我在C#.Net 4.6中有一个winform,它有一个元素主机。这将托管包含WPF RichTextBox的用户控件。我想从RichTextBox中获取文本以在winform / application上的其他地方使用。我想将它用作字符串。

我试过这个;

var elementHost = this.elementHost1;
var wpfTextBox = (System.Windows.Controls.RichTextBox)elementHost.Child;
string richText = new TextRange(wpfTextBox.Document.ContentStart, wpfTextBox.Document.ContentEnd).Text;

textBox1.Text = richText.ToString();

第2行因此错误而失败;

  

'无法转换类型的对象   ' SyncfusionWindowsFormsApplication3.UserControl1'输入   ' System.Windows.Controls.RichTextBox''

如何从elementHost1中托管的UserControl1中的RichtextBox中获取文本?

UPDATE - 包含RichtextBox的用户控件的XAML;

<UserControl x:Class="SyncfusionWindowsFormsApplication3.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-  compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:SyncfusionWindowsFormsApplication3"
             mc:Ignorable="d" Width="1093.598" Height="423.11">
    <RichTextBox HorizontalAlignment="Left" Height="404" Margin="14,9,0,0" VerticalAlignment="Top" Width="1070" FontFamily="Arial" FontSize="16" SpellCheck.IsEnabled="True" BorderBrush="Black" BorderThickness="3" ScrollViewer.CanContentScroll="True" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" TextChanged="RichTextBox_TextChanged">
        <FlowDocument>
            <Paragraph>
                <Run Text="RichTextBox"/>
            </Paragraph>
        </FlowDocument>
    </RichTextBox>
</UserControl>

1 个答案:

答案 0 :(得分:0)

我通过在winform上运行时创建元素主机来解决问题。我在表格上声明了以下内容;

public ElementHost host = new ElementHost();
    public System.Windows.Controls.RichTextBox wpfRichText = new System.Windows.Controls.RichTextBox();

然后添加wpfRichText作为主持人的子项。

稍后在表单中我有一个按钮,它执行以下操作;

    string richText = new TextRange(wpfRichText.Document.ContentStart, wpfRichText.Document.ContentEnd).Text;
        textBox1.Text = richText;

这将从元素主机中托管的RichTextBox中提取文本并将其添加到文本框中(作为示例 - 我实际上将文本用于其他目的)。