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

Wpf 从FlowDocument中删除图像时,如何删除图像文件?,wpf,wpftoolkit,Wpf,Wpftoolkit,我有一个可编辑的RichTextBox,用户可以在其中添加表格、段落、超链接、图像等。当用户插入图像时,我的程序将创建从选定位置到应用程序目标目录的图片副本,并在图像对象中设置此新源 现在用户可以从RichTextBox中删除图像。在这种情况下,应用程序还应该从其目录中删除图像文件。我试图找到当任何内容被删除时在FlowDocument中发生的任何事件。我没有发现这样的事件 或者,我决定使用图像对象的卸载事件。当图像被删除时,卸载的事件被适时地触发(有时两次),我的删除文件的代码可以正常工作。现

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

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

或者,我决定使用图像对象的卸载事件。当图像被删除时,卸载的事件被适时地触发(有时两次),我的删除文件的代码可以正常工作。现在的问题是RichTextBox被放置在一个TabItem中。若我切换到另一个选项卡项,图像对象将触发卸载事件并删除文件。为了解决这个问题,我尝试在卸载事件期间检测图像对象属性的变化。我发现我可以使用父属性。FlowDocument中图像对象的父对象是InlineUIContainer。所以,若图像被移除,InlineUIContainer的父级将变为null(当焦点转移到其他TabItem时不为null)。这让我点头删除图像文件,它可以根据需要工作

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

  • 图像位于段落中,段落的父级变为空
  • 图像位于TableCell中,表的父项变为空
  • 图像位于ListItem中,列表的父级变为空
  • 图像可以在树上很深。因此,检查每个容器的父容器是令人厌烦的

    然后我想在按Delete/Backspace键时获取所选内容的XAML。这样,我将使用XMLAPI解析所选的图像标记并删除这些文件。我试图编写代码将RichTextBox的选择保存到一个文件中。所有选定的元素,如表格、列表、段落等,在生成的XAML中都是可用的,但在选择中不知何故忽略了图像。我正在写下面的代码

    var stream = new System.IO.FileStream("e:\\check.xml", System.IO.FileMode.Create);
    rtfMain.Selection.Save(stream, DataFormats.Xaml, true);
    stream.Close();
    
    总之,我只想知道是否从FlowDocument中删除了任何内容(图像、超链接等)并删除了引用文件。但不知何故,解决办法似乎非常难以捉摸

    提前感谢您抽出时间


    Ritesh

    是否将这些流程文档保存到磁盘?是否将流程文档保存在与图像相同的目录中?我的想法是保存,然后将FlowDocument及其图像放在自己的目录中,并清除工作目录。