flowdocument reader には pagenumber プロパティがありますが、そのプロパティは読み取り専用です。フロードキュメント リーダーで特定のページ番号に移動する方法はありますか。助けてください。
ありがとう。
flowdocument reader には pagenumber プロパティがありますが、そのプロパティは読み取り専用です。フロードキュメント リーダーで特定のページ番号に移動する方法はありますか。助けてください。
ありがとう。
FlowDocumentReader に含まれる FlowDocument のブロックを追跡する場合は、次のように単純に使用できます。
// Getting a block by index
YourReader.Document.Blocks.ElementAt(index).BringIntoView();
// Showing Last Block
YourReader.Document.Blocks.LastBlock.BringIntoView();
// Showing the last Inline
(YourReader.Document.Blocks.LastBlock as Paragraph).Inlines.LastInline.BringIntoView();
これは、FlowDocumentReader の ViewingModes ページでのみ機能します。
スクロール モードでこれを行いたい場合は、ビジュアル ツリーを下って、次のように ScrollViewer を検索する必要があります。
public static ScrollViewer FindScroll(Visual visual)
{
if (visual is ScrollViewer)
return visual as ScrollViewer;
ScrollViewer searchChiled = null;
DependencyObject chiled;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(visual); i++)
{
chiled = VisualTreeHelper.GetChild(visual, i);
if (chiled is Visual)
searchChiled = FindScroll(chiled as Visual);
if (searchChiled != null)
return searchChiled;
}
return null;
}
ScrollViewer scroller = FindScroll(YourReader as Visual);
if (scroller != null)
(scroller as ScrollViewer).ScrollToBottom();
ユーザーをページ表示に制限する場合は、代わりにFlowDocumentPageViewerを使用してください。これにはGoToPage()メソッドがあります。何らかの理由で、GoToPage()はFlowDocumentReaderで提供されていないようです。これは、FlowDocumentReaderが常にページングが意味のあるモードにあるとは限らず(ユーザーは連続スクロールビューを選択できる)、意味のあるときに独自のUIを提供するためだと思います。
NavigationCommands.GoToPageコマンドを送信してみることができますが、これはFlowDocumentPageViewerおよびDocumentViewerでの動作としてのみ文書化されています。FlowDocumentReaderではテストしていません。