wpf - 在便笺中滚动
解决方案
编辑:下面概述的解决方案将很快作为 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()
后添加方法(~第 183 行)。mTextBox
接下来,编辑
NoteManager
类 - Samples/PDFViewWPFTools/CS/Utilities/NoteManager.cs - 并添加一个HandlePreviewMouseWheel
方法。这将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
类以确保笔记管理器PreviewMouseWheel
在尝试页面更改之前有机会处理。打开 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; } } } }
通过执行上述操作,我们有NoteManager
机会在PreviewMouseWheel
使用它做任何其他事情之前处理它。
另一点需要注意的是,我们现在必须使用类中的方法在代码中“进行滚动”。mTextBox.ScrollToVerticalOffset
NoteHost
推荐阅读
- haskell - Servant.Swagger ToSchema for Data.Bson.ObjectId
- python - 在 NodeJS 上获取 Pyspark 作业输出
- python - 为什么 Python 会锁定端口?这可以安全地用于简单的概念验证实时应用吗
- php - 强制将 HTTP 重定向到 HTTPS
- react-native - node_modules/react-native-linear-gradient/common.jsAttempted import error: 'requireNativeComponent' 没有从 'react-native-web/dist/index' 导出
- visual-studio-code - 用于在 prop 和 value 之间强制使用空格的 Sass linting 规则是否与 VS Code 一起工作不正确?
- c++ - 如何在另一个函数中传递一个函数的成员
- reactjs - 在 React 外部构造函数中创建动态引用
- sql-server - sql server 位置的更改导致事件 1026 .Net 运行时
- couchbase - 由于以下 n1ql 错误,无法执行查询