【问题标题】:How to listen for folding event in AvalonEdit如何在 AvalonEdit 中监听折叠事件
【发布时间】:2018-02-02 18:37:09
【问题描述】:

我已经成功地将折叠添加到我的AvalonEdit 文档中,但是,为了获得真正有用​​的体验,我需要存储折叠状态,所以下次用户打开文档时,折叠状态会恢复。

我的问题是我如何知道FoldSection 何时被用户折叠,例如点击时? This class 不通知属性更改。我找不到任何事件来改变折叠状态。

【问题讨论】:

    标签: c# wpf folding avalonedit


    【解决方案1】:

    不幸的是,没有实现 AvalonEdit 的此类事件。 您必须从 GitHub 获取源代码并自行添加。

    FoldingManager 将创建一个 TextSegmentCollection。使用 FoldingManager.AllFoldings,即使状态为 IsFolded,您也应该能够看到所有折叠。但是从用户控件之外的集合是不可能的。所以你必须改变原来的来源。

    看来,来自 AvalonEdit 的团队并没有真正更新那里的项目......目前我正在开发以 AvalonEdit 为基础的版本。也许我也会找到时间来实现这个功能,但这可能需要时间......所以当你可以自己解决你的问题时,请告诉我:)

    【讨论】:

      【解决方案2】:

      我知道这是旧的,这不是您正在寻找的,但我有类似的需要对折叠做出反应,并且无法为我的解决方案修改 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;
      }
      

      请确保仅在实际安装边距后才执行此操作,否则它将不存在。在我的例子中,鼠标事件非常简单,只需一个函数调用,但你可以在其中放置任何你需要的东西。希望这对可能有类似情况的人有所帮助。

      【讨论】:

        猜你喜欢
        • 2015-10-19
        • 2014-07-17
        • 1970-01-01
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        • 2012-09-02
        • 2020-11-22
        • 2023-04-02
        相关资源
        最近更新 更多