编辑
:下面概述的解决方案将很快作为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
中的方法
记事本