1

WPF 窗口有一个加载 Xaml 包格式的富文本框,我可以对其进行编程以打开、保存和关闭文档。现在,在关闭时,我可以在关闭时询问用户是否保存,我可以通过一个消息框来做到这一点。

现在的问题是,如果富文本框是空的,或者用户没有对其进行任何修改,即使这样,保存问题也会在关闭时引发火灾。

我试图通过比较richtextbox、flowdocument对象和文本范围对象来比较开始数据和结束时间数据,但我确实对它们有任何运气,请你告诉我如何才能得到一个好的比较/如果发生任何变化。如果使用富文本框的更改事件并使用标志,则可以解决工作,但如果用户还原更改,则问题再次出现。

求指教谢谢。

4

2 回答 2

0

计算已保存的 Xaml 包和要保存的 Xaml 包的哈希值。如果不相等则保存。HashAlgorithm.ComputeHash 方法采用 aStream或 a Byte[]

byte[] oldHashcode = MD5CryptoServiceProvider.Create().ComputeHash( Stream or byte[] );
byte[] newHashcode = MD5CryptoServiceProvider.Create().ComputeHash( Stream or byte[] );

if (!newHashcode.SequenceEqual(oldHashcode))
{
    ask the user to save
}
于 2012-05-20T11:25:14.953 回答
0

当您的窗口打开时将标志设置为 false,表明 rtb 没有更改。

为您的 Richtextbox 处理 TextChanged 事件,在 textchanged 事件子例程中将指示 rtb 是否已更改的标志设置为 true。

在关闭时间检查标志,看看它是真还是假。

值得注意的是,您还需要另一个标志来让 textchange 子例程知道您的表单正在初始化,因为 textchange 事件在 rtb 最初加载时触发。只需将此初始加载标志初始化为表单上的局部变量,值为 true,并在表单加载事件结束时将其设置为 false。

在 textchange 例程中,首先检查初始加载是否正在进行,如果它不翻转 rtb 标志为真。

于 2012-05-19T21:49:40.377 回答