由于这个原因,我想暂停监听堆栈(或在任何textchange之后执行pop).但
你知道解决这个问题的可能性吗?
我已经实现了自己的DocumentColorizingTransformer.但是现在,我如何将它添加到AvalonEdit?
我在一个运行我自己的定制语言的应用程序中使用AvalonEdit.我想在Avalon Edit中加入适当的语法高亮显示.通常,这是通过手动定义xml文件中的突出显示规则来完成的.
但是,每当我扩展语言时,我都不希望突出显示规则总是与语言语法不同步.所以我希望使用已经包含在我的coco/R解析器中的语法信息来自动生成这些规则.那么有没有办法以编程方式向Avalon Edit添加语法突出显示规则?
谢谢
我想实现一些在提供文档行时以编程方式更改文本背景的东西。(看起来与文本块选择非常相似的东西。我将使用它来调试我正在使用的 IDE 的断点设计)。我不想使用选择,因为它会导致文本框滚动。
我想我需要使用 DocumentColorizingTransformer 但我不是 100% 确定如何去做。
public class ColorizeAvalonEdit : ICSharpCode.AvalonEdit.Rendering.DocumentColorizingTransformer
{
protected override void ColorizeLine(ICSharpCode.AvalonEdit.Document.DocumentLine line)
{
int lineStartOffset = line.Offset;
string text = CurrentContext.Document.GetText(line);
int start = 0;
int index;
if (line.LineNumber == LogicSimViewCodeWPFCtrl.currentLine)
{
while ((index = text.IndexOf(text, start)) >= 0)
{
base.ChangeLinePart(
lineStartOffset + index, // startOffset
lineStartOffset + index + text.Length, // endOffset
(VisualLineElement element) =>
{
element.TextRunProperties.SetBackgroundBrush(Brushes.Red);
});
start = index + 1; // search for next occurrence
}
}
}
} …Run Code Online (Sandbox Code Playgroud) 我试图让一个边框显示avalonEdit在Wpf控件中的"盒子" 周围,但似乎无法实现它.
我补充说BorderBrush="Black" BorderThickness="2"但很明显我错过了一些东西.
我用谷歌搜索了,但是,尽管我的努力,我找不到任何东西 - 我怀疑我可能不知道谷歌的正确术语,因为它感觉它应该是直截了当的!
代码如下:
<Label Content="Account:" HorizontalAlignment="Left" Margin="10,28,0,0" VerticalAlignment="Top"/>
<TextBox Name ="textBoxAccount" HorizontalAlignment="Left" Height="23" Margin="66,28,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120"/>
<Label Content="Query:" HorizontalAlignment="Left" Margin="10,59,0,0" VerticalAlignment="Top"/>
<Button x:Name="btnGo" Content="Go!" HorizontalAlignment="Left" Height="25" Margin="10,342,0,0" VerticalAlignment="Top" Width="146"/>
<avalonEdit:TextEditor
xmlns:avalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit"
x:Name="textEditor"
FontFamily="Consolas"
SyntaxHighlighting="AWQL"
ScrollViewer.VerticalScrollBarVisibility="Hidden"
WordWrap="True"
Visibility="Visible"
BorderBrush="Black" BorderThickness="2"
FontSize="10pt" Margin="12,89.96,10,0" Height="229" VerticalAlignment="Top"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
它呈现如下:

但'avalonEdit'框似乎没有渲染边框,所以看起来不可见,除非/直到用户点击它并开始输入.
我真的希望边框看起来与用户控件顶部的简单文本框相同,但现在我已经满足于任何可见的东西了!
我将AvalonEdit用作TextEditor,并且当从Key_Down按钮调用该代码时,不在CodeCompletionWindow中显示数据,但是当作为Text_Entered事件处理时,一切正常。下面是示例代码
[Serializable]
public class CodeEditor : TextEditor
{
public CompletionWindow CompletionWindow = null;
public CodeEditor()
{
//CompletionWindow pops up without any data.
this.TextArea.KeyDown += TextArea_KeyDown;
//CompletionWindow pops up and data is displayed.
this.TextArea.TextEntered += this.OnTextEntered;
}
void TextArea_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Space && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
ShowCompletion("");
}
}
void OnTextEntered(object sender, TextCompositionEventArgs e)
{
//e.Handled = true;
if (e.Text == "\n" || e.Text == "\t" || e.Text == " ")
{
return; …Run Code Online (Sandbox Code Playgroud) 是否有一个用于AvalonEdit控件的xshd规则集以突出显示JSON语法?我尝试了JavaScript的定义,但它不能很好地工作,即:
{
"name" : "value"
}
Run Code Online (Sandbox Code Playgroud)
使用JavaScript定义,名称和值都具有相同的颜色.
是否有JSON的规则集,如果没有,我如何修改xshd以便在JSON中获得名称和值的不同颜色?
令人难以置信的令人敬畏的AvalonEdit WPF TextEditor控件似乎缺乏一个重要的功能,或者至少我无法弄明白.给定偏移量和长度,使用HighlightColor突出显示TextDocument中的该部分.简单吧?
显然不是.我有RTFM,关于"语法突出显示"的文档让我更加困惑.有人在SharpDevelop论坛上问了同样的问题,我恐怕无法理解Herr Grunwald的回答.
这是我的尝试,使用DocumentHighlighter类(当然它不起作用):
textEditor1.Text = "1234567890";
HighlightingColor c = new HighlightingColor() { FontWeight = FontWeights.ExtraBold };
DocumentHighlighter dh = new DocumentHighlighter(textEditor1.Document, new HighlightingRuleSet());
HighlightedLine hl = dh.HighlightLine(1);
hl.Sections.Add(new HighlightedSection() { Color = c, Offset = 1, Length = 3 });
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮忙!
是否可以在WPF应用程序中使用AvalonEdit控件作为ironPython脚本编辑器?要求是具有语法突出显示和内联脚本验证.如果可能的话,intellisense会更好.如果不是AvalonEdit,请建议任何其他此类控件(即使是商业用途)可用于此目的.
提前致谢
我在我的项目中使用了AvalonEdit控件.当我使用Ctrl + C或Ctrl + V等快捷键时,相关的复制/粘贴命令可以正常工作.我决定在上下文菜单中使用这些命令以获得更多可用性,因为有些用户习惯于右键单击而不是快捷方式.我使用以下XAML代码进行控制:
<avalonedit:TextEditor.ContextMenu>
<ContextMenu>
<MenuItem Command="Undo" />
<MenuItem Command="Redo" />
<Separator/>
<MenuItem Command="Cut" />
<MenuItem Command="Copy" />
<MenuItem Command="Paste" />
</ContextMenu>
</avalonedit:TextEditor.ContextMenu>
Run Code Online (Sandbox Code Playgroud)
但是当我运行程序时,这些命令总是在上下文菜单中显示为禁用,如下所示:

当我第一次遇到这个问题时,我发布了一个不同的问题但是在MD.Unicorn的帮助下(正如你在下面的评论中看到的)我意识到当你将AvalonEdit放在ListBox或ListView命令的ItemTemplate中时不起作用.
在MD.unicorn的帮助下,我创建了以下测试代码来重现结果:
ViewModel类和数据模板的简单类
public class MyViewModel : INotifyPropertyChanged
{
public MyViewModel()
{
collection = new ObservableCollection<myClass>();
mc = new myClass();
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propName)
{
var h = PropertyChanged;
if (h != null)
h(this, new PropertyChangedEventArgs(propName));
}
public ObservableCollection<myClass> collection { get; set; }
public myClass …Run Code Online (Sandbox Code Playgroud) avalonedit ×10
wpf ×8
c# ×7
.net ×3
sharpdevelop ×2
binding ×1
ironpython ×1
stack ×1
text-editor ×1
xaml ×1