从FlowDocument中删除图像时,如何删除图像文件?

时间:2012-12-06 14:07:23

标签: wpf wpftoolkit

我有一个可编辑的RichTextBox,用户可以在其中添加表格,段落,超链接,图像等。当用户插入图像时,我的程序会将所选位置的图片副本创建到应用程序的目标目录,并在Image对象中设置此新源。 / p>

现在用户可以从RichTextBox中删除图像。在这种情况下,应用程序还应从其目录中删除图像文件。我试图在删除任何内容时找到FlowDocument中发生的任何事件。我发现没有这样的事件。

或者我决定使用Image对象的Unloaded事件。当删除图像时,Unloaded事件被正式触发(有时两次)并且我的代码删除文件有效。现在问题是RichTextBox放在一个TabItem中。如果我转移到另一个标签项,Image对象将触发Unloaded事件并删除文件。为了解决这个问题,我尝试在Unloaded事件期间检测Image对象属性的更改。我发现我可以使用Parent属性。 FlowDocument中Image对象的父级是InlineUIContainer。因此,如果删除了图像,则InlineUIContainer的Parent变为null(当焦点转移到其他TabItem时不为null)。这让我点头删除图像文件,按照需要工作。

但是当图像落在选择范围内时问题就开始了。在这种情况下,将触发Unloaded事件,但InlineUIContainer的Parent不为null。我跟踪了 -

  1. 图片在Paragraph中,Paragraph的Parent变为null,
  2. 图像在TableCell中,Table的Parent变为null,
  3. 图像在ListItem中,List的Parent变为null。
  4. 图像可以在树中很深。所以检查每个容器的父级是很烦人的。

    然后我想在Delete / Backspace按键上抓取所选内容的XAML。这样,我将解析使用XML API进行选择的Image标记并删除这些文件。我尝试编写代码以将RichTextBox的选择保存到文件中。所有选定的元素(如表,列表,段落等)都可以在结果XAML中使用,但是Image在选择中以某种方式被省略。我正在编写以下代码。

    var stream = new System.IO.FileStream("e:\\check.xml", System.IO.FileMode.Create);
    rtfMain.Selection.Save(stream, DataFormats.Xaml, true);
    stream.Close();
    

    总之,我只想知道是否从FlowDocument中删除了任何内容(图像,超链接等)并删除了参考文件。但不知何故,解决方案似乎非常难以捉摸。

    感谢您提前抽出时间。

    仅限Ritesh

0 个答案:

没有答案