![](/img/trans.png)
[英]How to get a reference to the Window from a WPF UserControl hosted in a WinForms ElementHost
[英]Get text from RichText wpf control hosted in elementhost on Winforms in C#
我在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>
我通过在运行时在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中提取文本,并将其添加到文本框中(作为示例-实际上,我会将文本用于其他目的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.