Прокрутка в заметках - PullRequest
       15

Прокрутка в заметках

0 голосов
/ 15 октября 2018

Я получил следующий пример заметки:

enter image description here

Если заметка имеет более 9 строк, дополнительные строки не отображаются.Я могу перемещаться по заметке с помощью клавиш со стрелками.Если я собираюсь прокрутить колесо мыши, оно, похоже, игнорирует всплывающее окно и просто меняет страницу.

Можно ли активировать прокрутку для всплывающих окон с заметками?

1 Ответ

0 голосов
/ 18 октября 2018

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

...