Редактировать : Решение, описанное ниже, скоро будет доступно как часть примеров, включенных в загрузку 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
(~ строка 183). Затем отредактируйте класс 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
классе.