AvalonEdit est composé de trois éléments:
TextEditor
, qui enveloppe un TextArea
dans un ScrollViewer
et ajoute un haut niveau TextBox
-like API
TextArea
, qui prend TextView
et ajoute le caret, la sélection et la gestion des entrées
TextView
, qui est l'affichage du code réel
Donc, pour désactiver toutes les fonctions d'édition, vous pouvez utiliser directement la classe TextView
. Pour activer le défilement, vous aurez besoin de l'envelopper dans un ScrollViewer
vous (important: permettre CanContentScroll
d'éviter de rendre les parties invisibles du document)
<ScrollViewer
Focusable="False"
CanContentScroll="True"
VerticalContentAlignment="Top"
HorizontalContentAlignment="Left">
<avalonedit:TextView Name="textView" />
</ScrollViewer>
En utilisant le composant directement TextView
, vous aurez besoin de faire quelques du travail habituellement fait par TextEditor
vous:
textView.Document = new TextDocument(); // create document instance
textView.LineTransformers.Insert(0,
new HighlightingColorizer(HighlightingManager.Instance.GetDefinition("C#")));
TextView
ne suffit pas si vous voulez garder certaines des fonctionnalités d'édition autour (par exemple, la sélection de texte et le copier dans le presse-papiers). Dans ce cas, vous devrez continuer à utiliser TextEditor
ou TextArea
et désactiver les fonctionnalités non souhaitées.
Vous ne pouvez pas désactiver vraiment le caret comme la logique de sélection dépend d'avoir un caret, mais vous pouvez le cacher:
textEditor.TextArea.Caret.CaretBrush = Brushes.Transparent;
Faire le document en lecture seule désactivera la saisie de texte et diverses commandes d'édition:
textEditor.IsReadOnly = true;
Vous pouvez également supprimer des commandes de gestionnaires d'entrée de la zone de texte:
// remove the keyboard caret navigation and selection logic,
// but keep the mouse selection logic and editing commands
textEditor.TextArea.DefaultInputHandler.NestedInputHandlers.Remove(
textEditor.TextArea.DefaultInputHandler.CaretNavigation);
merci pour une réponse détaillée. Quel serait alors le bon moyen d'ajouter des numéros de ligne? 'TextView' n'a pas cette propriété. J'ai essayé d'ajouter 'avalonedit: LineNumberMargin' mais je ne sais pas comment le connecter à la vue du texte. La définition de la propriété 'TextView' entraîne le blocage des éléments. – Arek
Juste testé l'approche textEditor, et après avoir enlevé CaretNavigation défilement fonctionne comme dans un vrai spectateur. C'est parfait et je finirai probablement par utiliser cette approche. – Arek