Microsoft.Office.Interop.Word 收听已保存的 属性
Microsoft.Office.Interop.Word Listen on the Saved Property
我一直在寻找一种解决方案,以便在文档变成 脏(未保存)
时引起注意
我知道在 word 文档中有一个 属性 Saved
,但我的问题是当布尔值变为 false
时我需要得到通知。我一直在寻找一个没有成功的事件。
我尝试过的事件:
DocumentChange // this event fired when the a new document is open
WindowSelectionChange // this event fired when the carriage move but not when the document text change
我查看了 Microsoft.Interop 活动页面,但其中 none 似乎适合我的情况。
我没办法了。
上下文:
我创建了一个上传文档的 WPF 应用程序。在这个应用程序中,我有一个上传 button
。当文档的 Saved
属性 为真时,此按钮将被禁用,而当此标志变为假时,我想禁用它。但是这个属性改的时候就没有hook了...
我不知道有什么方法可以做你想做的事 - 没有特定的事件,所以我唯一能想到的就是在每次选择更改时检查(虽然这会在有没有变化,当有变化时它也会触发)。
另一种解决方案:您的 WPF 按钮可能绑定到具有 bool CanExecute()
方法的 ICommand
。如果命令的 CanExecuteChanged
事件链接到框架的 CommandManager.RequerySuggested
事件,那么按钮应该在各种事件上更新(焦点变化等 - 只要框架认为状态可能已经改变。它会触发很多!)
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
这通常是各种 MVVM 框架的 RelayCommand
/ DelegateCommand
实现处理此问题的方式。
尝试使用应用程序 class 的 DocumentBeforeSave 方法。它在保存任何打开的文档之前触发。
您也可以考虑使用计时器对象定期检查保存的 属性 值。请注意,您需要在主线程上访问 Word 对象模型以避免出现问题,因为 Office 应用程序使用单线程单元模型。
我一直在寻找一种解决方案,以便在文档变成 脏(未保存)
时引起注意我知道在 word 文档中有一个 属性 Saved
,但我的问题是当布尔值变为 false
时我需要得到通知。我一直在寻找一个没有成功的事件。
我尝试过的事件:
DocumentChange // this event fired when the a new document is open
WindowSelectionChange // this event fired when the carriage move but not when the document text change
我查看了 Microsoft.Interop 活动页面,但其中 none 似乎适合我的情况。
我没办法了。
上下文:
我创建了一个上传文档的 WPF 应用程序。在这个应用程序中,我有一个上传 button
。当文档的 Saved
属性 为真时,此按钮将被禁用,而当此标志变为假时,我想禁用它。但是这个属性改的时候就没有hook了...
我不知道有什么方法可以做你想做的事 - 没有特定的事件,所以我唯一能想到的就是在每次选择更改时检查(虽然这会在有没有变化,当有变化时它也会触发)。
另一种解决方案:您的 WPF 按钮可能绑定到具有 bool CanExecute()
方法的 ICommand
。如果命令的 CanExecuteChanged
事件链接到框架的 CommandManager.RequerySuggested
事件,那么按钮应该在各种事件上更新(焦点变化等 - 只要框架认为状态可能已经改变。它会触发很多!)
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
这通常是各种 MVVM 框架的 RelayCommand
/ DelegateCommand
实现处理此问题的方式。
尝试使用应用程序 class 的 DocumentBeforeSave 方法。它在保存任何打开的文档之前触发。
您也可以考虑使用计时器对象定期检查保存的 属性 值。请注意,您需要在主线程上访问 Word 对象模型以避免出现问题,因为 Office 应用程序使用单线程单元模型。