【发布时间】:2018-02-02 18:37:09
【问题描述】:
我已经成功地将折叠添加到我的AvalonEdit 文档中,但是,为了获得真正有用的体验,我需要存储折叠状态,所以下次用户打开文档时,折叠状态会恢复。
我的问题是我如何知道FoldSection 何时被用户折叠,例如点击时? This class 不通知属性更改。我找不到任何事件来改变折叠状态。
【问题讨论】:
标签: c# wpf folding avalonedit
我已经成功地将折叠添加到我的AvalonEdit 文档中,但是,为了获得真正有用的体验,我需要存储折叠状态,所以下次用户打开文档时,折叠状态会恢复。
我的问题是我如何知道FoldSection 何时被用户折叠,例如点击时? This class 不通知属性更改。我找不到任何事件来改变折叠状态。
【问题讨论】:
标签: c# wpf folding avalonedit
不幸的是,没有实现 AvalonEdit 的此类事件。 您必须从 GitHub 获取源代码并自行添加。
FoldingManager 将创建一个 TextSegmentCollection
看来,来自 AvalonEdit 的团队并没有真正更新那里的项目......目前我正在开发以 AvalonEdit 为基础的版本。也许我也会找到时间来实现这个功能,但这可能需要时间......所以当你可以自己解决你的问题时,请告诉我:)
【讨论】:
我知道这是旧的,这不是您正在寻找的,但我有类似的需要对折叠做出反应,并且无法为我的解决方案修改 AvalonEdit。在我的应用程序中,我并不真正关心 什么 被折叠,只是如果任何东西被折叠或展开,我需要重新运行一些数据检查。
我发现我可以添加一个点击处理程序,这样折叠边距中的任何点击都可以触发我想要的。有可能过度触发(任何鼠标左键按下都会触发),但我的操作很便宜,所以我不担心额外的调用。
// Get the margin off the editor, if it exists
FoldingMargin_foldingMargin = Editor.TextArea.LeftMargins.OfType<FoldingMargin>().FirstOrDefault();
// if we have a margin, add a mouse event to it
if (_foldingMargin != null) {
_foldingMargin.MouseLeftButtonDown += foldingMargin_MouseLeftButtonDown;
}
请确保仅在实际安装边距后才执行此操作,否则它将不存在。在我的例子中,鼠标事件非常简单,只需一个函数调用,但你可以在其中放置任何你需要的东西。希望这对可能有类似情况的人有所帮助。
【讨论】: