我想在我的应用程序中包含一个XML编辑器 - 类似于VS的带有自动着色的XML编辑器等.
AvalonEdit听起来像是一个很好的解决方案.
但是,AvalonEdit附带了C#语法的示例,而不是XML语法.某处有XML语法示例吗?
我正在努力突出一个小脚本语言(这不是任何内置的衍生物),我有一个自定义XML文件设置不同的语法关键字等.
我真的想使用AvalonEdit中存在的XSHD系统来加载自定义关键字,但我需要在其中包含自定义属性.
所以基本上,经过大量的源代码搜索,我无法确定读取和指定关键字和规则集的文件.
有没有人知道我在哪里可以编辑所需的类来读取一些自定义属性并存储它们?
我在AvalonEdit中有所有的XSHD和高亮显示的东西都在工作,所以它没有使用它就是问题,更确切地说,它是在XSHD文件的关键字集合中使用自定义属性的问题.
例如:
<Keywords>
<Word defaultValue="hello" requiresShader="shadertype1, shadertype2" someCustomAttr="value">wordname</word>
</Keyword>
Run Code Online (Sandbox Code Playgroud)
因此,我需要为XSHD文件的解析器设置一些自定义属性,以加载这些自定义属性并将它们存储在我所处理的自定义类中,该类处理一些对我正在尝试的操作至关重要的逻辑组件.
我已经有了一个工作解析器来解析我所有关键字及其属性的XML文件(但是我把它写到了ScintillaNET,但之后发现了AvalonEdit,这对WPF等更好).
我将使用此信息编辑原始帖子,抱歉可能存在错误信息.
谢谢
我正在使用 AvalonEdit 编写电影脚本编辑器。
我扩展了 DocumentLine 类以具有“Type”属性,其值表示“字符”、“对话行”等。
我希望脚本中某种类型的文档行以大写形式编写(例如字符名称)。
渲染管道中是否有一个扩展点可以让我获取文档行并更改其大小写?
我尝试创建一个扩展 DocumentColorizingTransformer 的类,但是更改“protected override void ColorizeLine(DocumentLine line)”方法中的大小写不起作用。
我正在使用avalon编辑编写一个自定义软件,我正在寻找一种方法来使线之间的空间(高度)更大.目前,每当用户结束写一行并想要写另一行时,我就被迫添加一个空行.
我已经开始研究TextView似乎计算defaultLineHeight 的类,但我唯一能够影响的是视觉插入符号的高度,而不是内容本身.
目前我正在考虑使每一对线都看不见但我希望有一种更简单的方法来实现在线之间添加更多空间的简单操作.
这是TextView我正在检查的类的方法.欢迎任何提示或提示.
void CalculateDefaultTextMetrics()
{
if (defaultTextMetricsValid)
{
return;
}
defaultTextMetricsValid = true;
if (formatter != null)
{
var textRunProperties = CreateGlobalTextRunProperties();
using (
var line = formatter.FormatLine(
new SimpleTextSource("x", textRunProperties),
0,
32000,
new VisualLineTextParagraphProperties { defaultTextRunProperties = textRunProperties },
null))
{
wideSpaceWidth = Math.Max(1, line.WidthIncludingTrailingWhitespace);
defaultBaseline = Math.Max(1, line.Baseline);
defaultLineHeight = Math.Max(1, line.Height);
}
}
else
{
wideSpaceWidth = FontSize / 2;
defaultBaseline = FontSize;
**defaultLineHeight = FontSize + 3; // bigger …Run Code Online (Sandbox Code Playgroud) 外部资源: http://www.codeproject.com/Articles/42490/Using-AvalonEdit-WPF-Text-Editor
我正在使用编辑器显示日志文件,并希望在添加新行时它始终滚动到按钮,但前提是它已经位于底部。
我找到了 ScrollToEnd() 但这意味着它总是滚动,我需要某种方式来获取当前的滚动位置?有谁发现过或者知道它是否不存在吗?
我正在尝试使用 AvalonEdit 创建自定义超链接。我创建了一个生成器(基于示例),它可以识别语法,并且可以设置 Uri:
public class LinkGenerator : VisualLineElementGenerator
{
readonly static Regex imageRegex = new Regex(@"<mylink>", RegexOptions.IgnoreCase);
public LinkGenerator()
{}
Match FindMatch(int startOffset)
{
// fetch the end offset of the VisualLine being generated
int endOffset = CurrentContext.VisualLine.LastDocumentLine.EndOffset;
TextDocument document = CurrentContext.Document;
string relevantText = document.GetText(startOffset, endOffset - startOffset);
return imageRegex.Match(relevantText);
}
/// Gets the first offset >= startOffset where the generator wants to construct
/// an element.
/// Return -1 to signal no interest.
public override int GetFirstInterestedOffset(int …Run Code Online (Sandbox Code Playgroud) 再会!
我正在尝试制作简单的代码编辑器,因此我希望能够选择文本行并将其颜色更改为红色,使用ICSharpCode.AvalonEdit.TextEditor.
但我不知道如何使用它。你能帮我改变文本行的颜色吗?
谢谢你!
我知道如果你处理编辑器的PreviewKeyDown事件然后将KeyEventArgs的e.Handled设置为true,你可以完全禁用输入.
但是,我试图弄清楚如何在修改文本后防止文档文本更新.我想处理Document.Changing事件,如下所示:
textEditor.Document.Changing += Document_Changing;
Run Code Online (Sandbox Code Playgroud)
其中textEditor是我的AvalonEdit编辑器.我想在函数中检索正在修改的文本
private void Document_Changing(object sender, DocumentChangeEventArgs e)
Run Code Online (Sandbox Code Playgroud)
然后根据它做一些计算.但是,我不希望文本在编辑之前在编辑器中更新.我在Document_Changing中做了一些异步处理,当它完成时我会触发另一个事件,然后才想要它更新.我不想仅禁用可视更新,而是完全更新文档.
那么有没有办法禁用此更新,类似于在处理键盘相关事件时如何阻止输入?
先感谢您
我正在使用 AvalonEdit 为补丁文件创建一个视图,我想让它在整行中突出显示差异,而不仅仅是文本背景 - 类似于 GitHub for Windows 今天所做的:
我是 AvalonEdit 的新手,所以我不确定这样做的最佳方法。这是我迄今为止发现的:
覆盖VisualLineElementGenerator以创建一个额外的 TextSpan,它是控件的长度。这看起来很棘手。
创建一个新控件以添加到TextView.Layers后台并手动添加绿色/红色的 OnRender - 这似乎更有希望,但我需要挂钩什么事件以检测何时重新渲染并不太清楚。
覆盖 TextView - 这似乎有点矫枉过正。
编辑:这是一个简单的语法荧光笔会发生什么,这是我不想要的:
以下代码来自AvalonEdit项目:
// Creates a new TextEditor instance.
public TextEditor() : this(new TextArea())
{
}
Run Code Online (Sandbox Code Playgroud)
我不知道这: this(new ...部分是做什么的.你能帮忙解释一下C#语法吗?