我有一个可编辑的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。我跟踪了 -
图像可以在树中很深。所以检查每个容器的父级是很烦人的。
然后我想在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