C# 文本块+;RichTextBox到剪贴板

C# 文本块+;RichTextBox到剪贴板,c#,wpf,C#,Wpf,我试图将动态创建的TextBlock和动态创建的RichTextBox(它们并排放置)的内容放入c#+wpf中的剪贴板,但是,我无法这样做。我在谷歌上搜索了很多遍都没有用,我找到的最新代码是 StringBuilder clipboard = new StringBuilder(); String rtb = scrlPanel.Children.OfType<RichTextBox>().ToString(); //List<RichTextB

我试图将动态创建的TextBlock和动态创建的RichTextBox(它们并排放置)的内容放入c#+wpf中的剪贴板,但是,我无法这样做。我在谷歌上搜索了很多遍都没有用,我找到的最新代码是

StringBuilder clipboard = new StringBuilder();
        String rtb = scrlPanel.Children.OfType<RichTextBox>().ToString();
        //List<RichTextBox> rtb = scrlPanel.Children.OfType<RichTextBox>().;

        foreach(TextBlock txtb in scrlPanel.Children.OfType<TextBlock>())
        {
            clipboard.Append(txtb.Text + " " + "::" + Environment.NewLine + rtb.ToString() + Environment.NewLine);

        }
        Clipboard.SetText(clipboard.ToString());
StringBuilder剪贴板=新建StringBuilder();
字符串rtb=scrlPanel.Children.OfType().ToString();
//List rtb=scrlPanel.Children.OfType()。;
foreach(scrlPanel.Children.OfType()中的TextBlock txtb)
{
剪贴板.Append(txtb.Text++:“+Environment.NewLine+rtb.ToString()+Environment.NewLine);
}
Clipboard.SetText(Clipboard.ToString());
但是它不起作用,代码可以很好地复制文本块,但是RichTextBox内容显示为“System.Linq.Enumerable+d_uaa`1[System.Windows.Controls.RichTextBox]”

非常感谢您的帮助或指点


谢谢,

您正在从ToString()方法复制,该方法默认显示类型名

你应该这样做:

StringBuilder剪贴板=新建StringBuilder()

List rtbs=scrlPanel.Children.OfType().ToList();
列表文本=scrlPanel.Children.OfType().ToList();
foreach(文本中的文本块txtb)
{
RichTextBox rtb=rtbs[text.indexOf(txtb)];
字符串rtbtext=新的文本范围(rtb.Document.ContentStart,rtb.Document.ContentEnd).Text;
剪贴板.Append(txtb.Text++:“+Environment.NewLine+rtbtext+Environment.NewLine);
}
Clipboard.SetText(Clipboard.ToString());
也就是说,如果你的文本框和RichTextBox一样多,并且它们的顺序相同


PD:可能有更好的方法可以做到这一点,但这将是一个快速解决方案。

嗨,Kenneth,你是对的,richtextbox的数量和TextBlock的数量一样多-我尝试为richtextbox获取.Text属性,但它确实出现并使用了.ToString()只是给了我类型名称对不起,我被Windows Forms one弄糊涂了。我会更新我的答案的!我知道了!我尝试使用带有列表的TextRange……但它不接受rtb.Document-它只是不给我选项,但在您的帮助下,我已设法添加了TextRange,并在剪贴板上实现了它,代码如..foreach所示(文本中的TextBlock txtb){RichTextBox rtb=rtbs[Text.IndexOf(txtb)];TextRange txtRange=newtextrange(rtb.Document.ContentStart,rtb.Document.ContentEnd);clipboard.Append(txtb.Text+“”+:“+Environment.NewLine+txtRange.Text.TrimEnd()+Environment.NewLine);}好的,完美的(如果答案对你有帮助,别忘了接受)
    List<RichTextBox> rtbs = scrlPanel.Children.OfType<RichTextBox>().ToList();
    List<TextBlock> texts = scrlPanel.Children.OfType<TextBlock>().ToList();

    foreach(TextBlock txtb in texts)
    {
        RichTextBox rtb = rtbs[texts.indexOf(txtb)];
        string rtbtext = new TextRange(rtb .Document.ContentStart, rtb .Document.ContentEnd).Text; 
        clipboard.Append(txtb.Text + " " + "::" + Environment.NewLine + rtbtext + Environment.NewLine);

    }
    Clipboard.SetText(clipboard.ToString());