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