答案 0 :(得分:2)
编辑:下面概述的解决方案将很快作为PDFTron SDK下载中包含的示例的一部分提供。同时,我希望下面的解决方案有帮助。
是的,可以激活便签的滚动。
使用单页视图时,问题最明显。在连续模式下,它似乎可以正常工作。
但是,它并不像设置VerticalScrollVisibility = ScrollBarVisibility.Auto;
那样简单。有一些文件需要修改才能起作用。
好消息是,我们可以通过修改提供的示例中的代码来获得预期的行为。
解决方案是为来自PreviewMouseWheel
类的PDFViewWPF
事件添加一些处理。
在下载的示例中,进行了以下更改以使事情按预期运行:
在NoteHost
类(Samples / PDFViewWPFTools / CS / Utilities / NoteHost.cs)中添加一种方法来处理PreviewMouseWheel事件
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;
对象(〜第183行)之后,还请确保在NoteHost.CreateNoteAndArrow()
方法中添加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
方法在代码中“进行滚动” 。