Je tiens à détecter (de préférence par un événement) lorsque tout contenu est ajouté, modifié, etc. dans un flowdocument code> et quand je veux causer un
flowdocumentscrollviewer code> Affichage du flowdocument
code> pour faire défiler automatiquement jusqu'à la fin. P>
4 Réponses :
Utilisez-vous une richtextbox pour faire l'édition? Si oui, vous devriez simplement être capable de crochet textchanged code> événement puis appelle Le
ScrollToverticalOffset code> méthode
avec la valeur de Le ViewPorTheight code> Propriété
. P>
Non. Utilisation de flowdocumentsCrollviewer, pas Richtextbox.
Vous pouvez détecter les modifications du fichier Mettre tout ensemble, ce code devrait faire le tour: p> < Pré> xxx pré> où Notez que pour une généralité complète, je ne précalcule pas ScrollViewer en haut du code car le Notez que nous ne pouvons pas simplement appeler flowdocument code> en créant une plage de texte et en le surveillant pour les modifications. Le défilement vers le bas est plus difficile car vous devez trouver le
ScrollViewer code>. Également pour la performance, vous ne voulez pas que vous ne souhaitaez pas de refaire tous les calculs de défilement de chaque modification, vous devez donc utiliser
dispatcherations code>.
FindFirsvisualDescendantoftype code> est une simple recherche de préfixe de profondeur-première de l'arborescence visuelle à l'aide de
VisualtreeHelper.getchildrencount () Code> VisualtreeHelper. Getchild () code> et renvoyer le premier visuel trouvé du type spécifié. P>
flowdocumentsCrollViewer Le modèle de code> peut changer. Si cela ne se produira pas, ce code peut être accéléré en appelant
.ApplyTemplate () code> sur le
flowdocumentscrollviewer code>, puis informatique
ScrollViewer code> avant l'événement Le gestionnaire est enregistré: p>
ScrollViewer.getttemplatechild ("Part_conthostHost") CODE> et ignorer la recherche d'arborescence visuelle car
Gettemplatechild code> est protégé. P> p>
Je n'avais pas besoin de cela avec FlowDocument et FlowdocumentsCrollViewer Visual Tree Code. Juste 2 invoque, 1 pour créer et ajouter le paragraphe d'une chaîne et 1 pour mentionner ce paragraphe.
Après avoir accroché à un événement textchanged, vous pouvez simplement utiliser:
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();
J'utilise seulement un flowdocument et des flowocumentsCrollViewer. La solution de Catherintoview ci-dessus fonctionne parfaitement pour moi. Je n'avais pas besoin de Visualtreeheehelper Ma solution consiste à utiliser Dispatcher.Invoke pour écrire Créer le paragraphe, stockez ce paragraphe en tant que variable et ensuite répartiteur.Invoke à nouveau pour la mettre en vue. Cela semble la méthode la plus simple.
Vous pouvez utiliser la méthode d'extension suivante pour obtenir la visualiseur de défilement interne: Vous pouvez également utiliser ces méthodes d'extension avant d'ajouter du contenu pour vérifier la position de défilement de la vision de défilement elle-même (au cas où vous Voulez-vous faire défiler -Only- Si la visualiseur de défilement était déjà à la fin par exemple): p> Il suffit d'appeler ScrollViewer.scrolltoend () par exemple. P> < / p>