AvalonEdit 作为文本查看器 - 无插入符号
AvalonEdit as a text viewer - no caret
我希望 AvalonEdit 成为文本查看器。
我可以做:
textEditor.IsReadOnly = true;
并且该控件不允许进行任何更改,但它仍然像编辑器一样运行 - 显示插入符号,并使用导航键(箭头,页面 up/down)移动插入符号而不是滚动视图.
有什么办法让它成为查看器吗?或者至少,隐藏插入符号?
尝试将 IsHitTestVisible
属性 设置为 false
:
textEditor.IsHitTestVisible = false;
It does hide the caret, but a lot of thing do not work anymore, ie. scrolling with mouse wheel
如果您只想隐藏插入符号,您可以将其 CaretBrush
属性 设置为 Transparent
:
textEditor.TextArea.Caret.CaretBrush = Brushes.Transparent;
AvalonEdit 由三个部分组成:
TextEditor
,将 TextArea
包装在 ScrollViewer
中,并添加一个高级 TextBox
-like API
TextArea
,采用 TextView
并添加插入符号、选择和输入处理
TextView
,也就是实际代码显示
所以要禁用所有编辑功能,您可以直接使用TextView
class。要启用滚动,您需要自己将其包装在 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);
我希望 AvalonEdit 成为文本查看器。
我可以做:
textEditor.IsReadOnly = true;
并且该控件不允许进行任何更改,但它仍然像编辑器一样运行 - 显示插入符号,并使用导航键(箭头,页面 up/down)移动插入符号而不是滚动视图.
有什么办法让它成为查看器吗?或者至少,隐藏插入符号?
尝试将 IsHitTestVisible
属性 设置为 false
:
textEditor.IsHitTestVisible = false;
It does hide the caret, but a lot of thing do not work anymore, ie. scrolling with mouse wheel
如果您只想隐藏插入符号,您可以将其 CaretBrush
属性 设置为 Transparent
:
textEditor.TextArea.Caret.CaretBrush = Brushes.Transparent;
AvalonEdit 由三个部分组成:
TextEditor
,将TextArea
包装在ScrollViewer
中,并添加一个高级TextBox
-like APITextArea
,采用TextView
并添加插入符号、选择和输入处理TextView
,也就是实际代码显示
所以要禁用所有编辑功能,您可以直接使用TextView
class。要启用滚动,您需要自己将其包装在 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);