【问题标题】:Get text from RichText wpf control hosted in elementhost on Winforms in C#从 C# 中 Winforms 的 elementhost 中托管的 RichText wpf 控件获取文本
【发布时间】:2017-09-20 12:04:39
【问题描述】:

我在 C# .Net 4.6 中有一个 winform,它有一个元素主机。这承载了一个包含 WPF RichTextBox 的用户控件。我想从 RichTextBox 获取文本以在 winform/应用程序的其他地方使用。我想用它作为字符串。

这个我试过了;

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 获取文本?

更新 - 包含 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>

【问题讨论】:

  • 这是什么意思:“这承载了一个包含 WPF RichTextBox 的用户控件”。你能显示部分相关的 xaml 代码吗?
  • elementHost 承载包含 RichTextBox 的 UserControl1。我认为在 winform 上托管 WPF 控件的唯一方法是通过 UserControl?

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


【解决方案1】:

我通过在运行时在 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 中提取文本并将其添加到文本框中(作为示例 - 我实际上会将文本用于其他目的)。

【讨论】:

    猜你喜欢
    • 2015-02-17
    • 2012-01-17
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多