0

我正在尝试将动态创建的 TextBlock 和动态创建的 RichTextboxes(它们并排放置)的内容放入 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());

但它不起作用,代码复制 TextBlocks 就好了,但 RichTextBoxes 内容显示“System.Linq.Enumerable+d__aa`1[System.Windows.Controls.RichTextBox]”

非常感谢任何帮助或指示。

谢谢,

4

1 回答 1

1

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

你应该这样做:

StringBuilder 剪贴板 = new StringBuilder();

    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());

也就是说,如果您的 TextBoxes 与 RichTextBoxes 一样多,并且它们具有相同的顺序。

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

于 2013-04-19T17:57:09.170 回答