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>