C# WPF Перейдите к FlowDocument во фрейме: необходимо установить ViewMode=Scroll

При переходе к FlowDocument во фрейме для FlowDocumentReader по умолчанию используется ViewMode=Page. Мне нужно получить ссылку на FlowDocumentReader, чтобы я мог установить свойство ViewMode в Scroll.

Я могу получить ссылку на объект FlowDocument, приведя свойство Content фрейма к FlowDocument, но не могу найти ссылку на FlowDocumentReader, который создается при переходе к документу.

Я понимаю, что пользователь может легко нажать на кнопку просмотра прокрутки в FlowDocumentReader, но я должен быть в состоянии сделать это программно.

1 ответ

Я буквально лаял не то дерево! Ответ на мой вопрос заключался в том, что FlowDocumentReader является частью визуального дерева. Я должен был пойти на охоту за этим. Возможно, есть более элегантные способы сделать это, но этот работал:

    static public void SetReaderModeToScroll(Visual myVisual)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(myVisual); i++)
        {
            // fetch the child
            Visual childVisual = (Visual)VisualTreeHelper.GetChild(myVisual, i);

            // attempt to cast it to a FlowDocumentReader
            try
            {
                FlowDocumentReader reader = (FlowDocumentReader) childVisual;

                // if we get this far, we've found the reader
                reader.ViewingMode = FlowDocumentReaderViewingMode.Scroll;
                return;
            }
            // catch the exception if it doesn't work
            catch (Exception e)
            {
            }
            // Drill down another level and keep looking
            SetReaderModeToScroll(childVisual);
        }
    }
Другие вопросы по тегам