我希望AvalonEdit成为文本查看器。
我可以:
textEditor.IsReadOnly = true;
并且控件不允许进行任何更改,但它仍然像编辑器一样 - 显示插入符号,并使用导航键(箭头,页面向上/向下)移动插入符号而不是滚动视图。
有没有办法让它成为观众?或者至少,隐藏插入符号?
答案 0 :(得分:3)
AvalonEdit由三个部分组成:
TextEditor
,它将TextArea
包裹在ScrollViewer
中并添加了一个高级TextBox
- 就像API TextArea
,其中包含TextView
并添加插入符号,选择和输入处理TextView
,这是实际的代码显示因此,要禁用所有编辑功能,您可以直接使用TextView
类。要启用滚动,您需要自己将其包装在ScrollViewer
中(重要的是:启用CanContentScroll
以避免呈现文档的不可见部分)
<ScrollViewer
Focusable="False"
CanContentScroll="True"
VerticalContentAlignment="Top"
HorizontalContentAlignment="Left">
<avalonedit:TextView Name="textView" />
</ScrollViewer>
直接使用TextView
组件,您需要自己完成TextEditor
通常完成的一些工作:
textView.Document = new TextDocument(); // create document instance
textView.LineTransformers.Insert(0,
new HighlightingColorizer(HighlightingManager.Instance.GetDefinition("C#")));
如果您想保留一些编辑功能(例如选择文本并将其复制到剪贴板), TextView
是不够的。
在这种情况下,您需要继续使用TextEditor
或TextArea
,并停用不需要的功能。
你不能真正禁用插入符,因为选择逻辑依赖于插入符号,但你可以隐藏它:
textEditor.TextArea.Caret.CaretBrush = Brushes.Transparent;
将文档设为只读将禁用文本输入和各种编辑命令:
textEditor.IsReadOnly = true;
您可能还想从文本区域的输入处理程序中删除命令:
// 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);
答案 1 :(得分:1)
尝试将IsHitTestVisible
属性设置为false
:
textEditor.IsHitTestVisible = false;
它确实隐藏了插入符号,但很多东西不再起作用了,即。用鼠标滚轮滚动
如果您只想隐藏插入符号,可以将其CaretBrush
属性设置为Transparent
:
textEditor.TextArea.Caret.CaretBrush = Brushes.Transparent;