Wpf 在便签中滚动
我得到了下面的便签示例: 如果便签有9行以上,则其他行不可见。 我可以用我的箭头键浏览便笺。如果我要用鼠标滚轮滚动,它似乎忽略了弹出窗口,只是改变了页面 是否可以为便笺弹出窗口激活滚动 编辑:下面概述的解决方案将很快作为PDFTron SDK下载中包含的示例的一部分提供。同时,我希望下面的解决方案能有所帮助 是的,可以为便笺激活滚动 使用单页视图时,问题最为明显。在连续模式下,它似乎按预期工作 然而,它并不像设置Wpf 在便签中滚动,wpf,scroll,pdfnet,Wpf,Scroll,Pdfnet,我得到了下面的便签示例: 如果便签有9行以上,则其他行不可见。 我可以用我的箭头键浏览便笺。如果我要用鼠标滚轮滚动,它似乎忽略了弹出窗口,只是改变了页面 是否可以为便笺弹出窗口激活滚动 编辑:下面概述的解决方案将很快作为PDFTron SDK下载中包含的示例的一部分提供。同时,我希望下面的解决方案能有所帮助 是的,可以为便笺激活滚动 使用单页视图时,问题最为明显。在连续模式下,它似乎按预期工作 然而,它并不像设置VerticalScrollVisibility=ScrollBarVisibil
VerticalScrollVisibility=ScrollBarVisibility.Auto那么简单代码>。有几个文件需要修改以使其正常工作
好消息是,我们可以通过修改提供的示例中的代码来获得预期的行为
解决方案
解决方案是为来自PDFViewWPF
类的PreviewMouseWheel
事件添加一些处理。
在下载的示例中,进行了以下更改以使其按预期运行:
- 添加一个方法来处理
NoteHost
类(Samples/pdfviewwwpftools/CS/Utilities/NoteHost.CS)中的PreviewMouseWheel事件
- 还要确保添加
mTextBox.VerticalScrollBarVisibility=ScrollBarVisibility.Auto在实例化mTextBox
对象之后(~第183行),在NoteHost.createnoteandarow()方法中的code>
- 接下来,编辑
NoteManager
类-Samples/pdfviewwwpftools/CS/Utilities/NoteManager.CS-并添加handlepreviewmouseheel
方法。这将在每个显示(打开)的便笺上内部调用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\u previewmouseheel
。现有方法应如下所示:
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
的机会
另一点需要注意的是,我们现在必须使用NoteHost
类中的mTextBox.ScrollToVerticalOffset
方法在代码中执行“滚动”。您使用的是PDFViewCtrl还是PDFViewWPF类进行查看?我使用的是pdfviewpf。感谢您的澄清,我们现在正在研究这个问题,很快就会给你更新的,就像我预期的那样。非常感谢你!
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;
}
}
}
}