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);
}
}