代码之家  ›  专栏  ›  技术社区  ›  tg24

滚动便签

  •  1
  • tg24  · 技术社区  · 6 年前

    我得到了下面的便签示例:

    enter image description here

    如果便签有9行以上,则其他行不可见。 我可以用我的箭头键浏览笔记。如果我要用鼠标滚轮滚动,它似乎忽略了弹出窗口,只是改变了页面。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Vishnu Govind    6 年前

    编辑 :下面概述的解决方案将很快作为PDFTron SDK下载中包含的示例的一部分提供。同时,我希望下面的解决方案能有所帮助。

    使用单页视图时,问题最为明显。它似乎在连续模式下按预期工作。

    VerticalScrollVisibility = ScrollBarVisibility.Auto; . 有一些文件需要修改以使其正常工作。

    好消息是,我们可以通过修改提供的示例中的代码来获得预期的行为。

    解决方案

    解决方案是为 PreviewMouseWheel PDFViewWPF
    在下载的示例中,进行了以下更改以使其按预期运行:

    • 在中添加一个方法来处理PreviewMouseWheel事件 NoteHost 类(Samples/PDFViewWPFTools/CS/Utilities/NoteHost.CS)

      internal void HandlePreviewMouseWheel(object sender, MouseWheelEventArgs e)
      {
          var originalSource = (UIElement)e.OriginalSource;
          if (originalSource.IsDescendantOf(mNoteBorder) && mTextBox.IsFocused)
          {
              mTextBox.ScrollToVerticalOffset(mTextBox.VerticalOffset - e.Delta);
              e.Handled = true;
          }
      }
      
    • 还要确保添加 mTextBox.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; NoteHost.CreateNoteAndArrow() 方法,在 mTextBox
    • 接下来,编辑 NoteManager 类-Samples/PDFViewWPFTools/CS/Utilities/NoteManager.CS-并添加 HandlePreviewMouseWheel 方法。这将在内部调用 在每个显示(打开)的注释上,在处理事件的第一个注释处断开。

      internal void HandlePreviewMouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
      {
          foreach(var note in mActiveNotes)
          {
              note.Value.HandlePreviewMouseWheel(sender, e);
              if(e.Handled)
              {
                  break;
              }
          }
      }
      
    • ToolManager 预览鼠标滚轮 在尝试更改页面之前。打开Samples/PDFViewWPFTools/CS/ToolManager.CS并导航到 PDFView_PreviewMouseWheel

      private void PDFView_PreviewMouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
      {
          if (mCurrentTool != null && _IsEnabled)
          {
              ToolManager.ToolType prev_tm = mCurrentTool.ToolMode;
              ToolManager.ToolType next_tm;
              while (true)
              {
                  mCurrentTool.PreviewMouseWheelHandler(sender, e);
                  next_tm = mCurrentTool.NextToolMode;
                  if (prev_tm != next_tm)
                  {
                      mCurrentTool = CreateTool(next_tm, mCurrentTool);
                      prev_tm = next_tm;
                  }
                  else
                  {
                      break;
                  }
              }
          }
      }
      

      替换为以下代码:

      private void PDFView_PreviewMouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
      {
          if (mCurrentTool != null && _IsEnabled)
          {
              ToolManager.ToolType prev_tm = mCurrentTool.ToolMode;
              ToolManager.ToolType next_tm;
              while (true)
              {
                  mNoteManager.HandlePreviewMouseWheel(sender, e);
                  if (!e.Handled)
                  {
                      mCurrentTool.PreviewMouseWheelHandler(sender, e);
                      next_tm = mCurrentTool.NextToolMode;
                      if (prev_tm != next_tm)
                      {
                          mCurrentTool = CreateTool(next_tm, mCurrentTool);
                          prev_tm = next_tm;
                      }
                      else
                      {
                          break;
                      }
                  }
                  else
                  {
                      break;
                  }
              }
          }
      }
      

    记事本管理器 一个处理问题的机会 预览鼠标滚轮 在做其他事情之前。

    另一点需要注意的是,我们现在必须这样做 “进行滚动” mTextBox.ScrollToVerticalOffset 中的方法 记事本

    推荐文章