كيفية الانتقال إلى رقم صفحة معين في قارئ مستند التدفق من خلال الكود في WPF؟

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

سؤال

توجد خاصية رقم الصفحة في قارئ مستند التدفق. ولكن هذه الخاصية للقراءة فقط.هل هناك أي طريقة للانتقال إلى رقم صفحة معينة في قارئ مستندات التدفق. الرجاء المساعدة.

شكرًا.

هل كانت مفيدة؟

المحلول

إذا كنت على استعداد لتقييد المستخدمين لعرض ترحيلها، استخدم FlowDocumentPageViewer بدلا من ذلك: هذا له طريقة GoToPage (). لسبب ما GoToPage () لا يبدو أن عرضت على FlowDocumentReader. كنت أعتقد ذلك لأن FlowDocumentReader ليست دائما في وضع حيث الترحيل هو معنى (يمكن للمستخدم اختيار عرض التمرير المستمر)، ويوفر واجهة المستخدم الخاصة به لهذا عندما يكون ذات مغزى.

هل يمكن أن تحاول إرساله الأمر NavigationCommands.GoToPage، ولكن هذا تم توثيقه فقط إلى العمل على FlowDocumentPageViewer وDocumentViewer. أنا لم تختبر على FlowDocumentReader.

نصائح أخرى

إذا قمت بتتبع الكتل على FlowDocument الواردة في FlowDocumentReader ، مما يمكنك ببساطة استخدامه:

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

هذا يعمل فقط على صفحة ViewingModes الخاصة بـ FlowDocumentReader.

إذا كنت ترغب في القيام بذلك على وضع التمرير ، فيجب عليك النزول إلى الشجرة المرئية والبحث عن 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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top