¿Cómo ir al número de página en particular en el lector de documentos de flujo a través del código en WPF?

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

Pregunta

Hay una propiedad de número de página en el lector de documentos de flujo, pero esa propiedad es de solo lectura. ¿Hay alguna forma de ir a un número de página en particular en el lector de documentos de flujo? Por favor, ayuda.

Gracias.

¿Fue útil?

Solución

Si está dispuesto a restringir la visualización paginada de sus usuarios, use FlowDocumentPageViewer en su lugar: esto tiene un método GoToPage (). Por alguna razón, parece que GoToPage () no se ofrece en FlowDocumentReader; Supongo que esto se debe a que FlowDocumentReader no siempre está en un modo donde la paginación es significativa (el usuario puede seleccionar una vista de desplazamiento continuo), y proporciona su propia interfaz de usuario para esto cuando es significativa.

Podría intentar enviarle el comando NavigationCommands.GoToPage, pero esto solo se documenta como trabajando en FlowDocumentPageViewer y DocumentViewer; No lo he probado en FlowDocumentReader.

Otros consejos

Si realiza un seguimiento de los Bloques en el FlowDocument contenido en el FlowDocumentReader, de lo que simplemente puede usar:

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

Esto funciona solo en la página ViewingModes of FlowDocumentReader.

si desea hacerlo en el modo de desplazamiento, debe bajar el árbol visual y buscar el ScrollViewer, algo como esto:

        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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top