Comment accéder à un numéro de page particulier dans le lecteur de documents de flux via le code dans WPF?

StackOverflow https://stackoverflow.com/questions/1623133

Question

Il existe une propriété pagenumber dans flowdocument reader.Mais cette propriété est en lecture seule. Existe-t-il un moyen d'obtenir un numéro de page particulier dans flowdocument reader.S'il vous plaît, aidez-nous.

Merci.

Était-ce utile?

La solution

Si vous souhaitez limiter le mode d'affichage paginé de vos utilisateurs, utilisez plutôt FlowDocumentPageViewer: il comporte une méthode GoToPage (). Pour une raison quelconque, GoToPage () ne semble pas être proposé sur FlowDocumentReader; J'imagine que c'est parce que FlowDocumentReader ne se trouve pas toujours dans un mode dans lequel la pagination est utile (l'utilisateur peut sélectionner une vue de défilement continu) et fournit sa propre interface utilisateur à cet effet lorsqu'elle est utile.

Vous pouvez essayer de lui envoyer la commande NavigationCommands.GoToPage, mais cela n’est documenté que si vous travaillez sur FlowDocumentPageViewer et DocumentViewer; Je ne l'ai pas testé sur FlowDocumentReader.

Autres conseils

Si vous gardez une trace des blocs sur le FlowDocument contenu dans le FlowDocumentReader, que vous pouvez simplement utiliser:

// 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();

Ceci fonctionne uniquement sur la page ViewingModes de FlowDocumentReader.

si vous souhaitez le faire en mode défilement, vous devez descendre dans l’arborescence visuelle et rechercher le ScrollViewer, quelque chose comme ça:

        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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top