从RichTextBox FlowDocument中删除图像

时间:2010-09-21 15:56:29

标签: wpf richtextbox flowdocument

我有一个WPF应用程序,用户可以在RichTextBox中粘贴Word中的一些数据......但如果该单词数据有图像,我需要将其删除,我该如何才能删除它? 由于FlowDocument是xml,也许做一些linq魔术可以做到,但我不知道如何:/

2 个答案:

答案 0 :(得分:0)

有一个名为WordtoXAML Converter(http://wordtoxaml.codeplex.com)的工具。您可以使用它将Word文档内容转换为XAML,使用正则表达式匹配来识别图像,然后将其剥离。

答案 1 :(得分:0)

以下代码将执行您想要的操作。虽然它可能有点浪费(它看起来整个文档而不仅仅是刚刚粘贴的位),但它是唯一的方法,因为有时RichTextBox在指示最近绘制的范围时是不准确的:

 public class MyTextBox : RichTextBox
    {

        public MyTextBox()
        {
            CommandBindings.Add(new CommandBinding(ApplicationCommands.Paste, Paste));
        }

        protected virtual void Paste(object sender, ExecutedRoutedEventArgs e)
        {
            Paste();

            foreach (var image in FindImages())
            {
                if (image.SiblingInlines != null)
                {
                    image.SiblingInlines.Remove(image);
                }
            }
        }

        IEnumerable<InlineUIContainer> FindImages()
        {
            var result = new List<InlineUIContainer>();
            var blocks = Document.Blocks;
            for (TextPointer position = blocks.FirstBlock.ElementStart; position != null && position.CompareTo(blocks.LastBlock.ElementEnd) != 1; position = position.GetNextContextPosition(LogicalDirection.Forward))
            {
                InlineUIContainer element = position.Parent as InlineUIContainer;
                if (element != null && element.Child is Image)
                {
                    result.Add(element);
                }
            }
            return result;
        }
    }