2017-04-27 1 views
1

Je souhaite que AvalonEdit soit un visualiseur de texte.AvalonEdit en tant que visionneuse de texte - sans signe

Je peux faire:

textEditor.IsReadOnly = true; 

et le contrôle ne permet pas de faire des changements, mais il se comporter toujours comme un éditeur - montre un caret, et à l'aide des touches de navigation (flèches, page haut/bas) déplace le curseur au lieu de faire défiler la vue.

Y a-t-il un moyen d'en faire un spectateur? Ou au moins, cache-t-il le signe?

Répondre

3

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); 
+0

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

+0

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

1

Essayez de définir la propriété IsHitTestVisible-false:

textEditor.IsHitTestVisible = false; 

Il ne cache le caret, mais beaucoup de choses ne fonctionnent plus, par exemple. défilement avec roulette de la souris

Si vous voulez seulement cacher la caret que vous pouvez définir sa CaretBrush propriété à Transparent:

textEditor.TextArea.Caret.CaretBrush = Brushes.Transparent; 
+0

Il cache le caret, mais beaucoup de choses ne fonctionnent plus, à savoir. défilement avec la molette de la souris. – Arek

+0

S'il vous plaît voir mon edit. – mm8