标签: avalonedit

AvalonEdit:级联HighlightingColorizers

我想级联AvalonEdit的SyntaxHighlighting引擎.我有2个HighlightingDefinitions.第一个是主要语法.第二个是复杂的多行预处理器 - 标记语言.由于这个原因,在第一个语法中嵌入第二个语法太复杂了.更简单的方法是渲染第一种语法,然后更改受影响的线部分(基于第二种语法).

所以我HighlightingColorizer用第二语言实例化了一个新的并添加到了LineTransformers.但是第二种语言使整个文档着色,而不仅仅是具有预处理器指令的行部分:非预处理器代码是黑色的.

当我调试ColorizeLine第二行变换器的方法时,未突出显示的代码(=没有预处理器代码)的行未按预期进行着色.但线条的颜色是黑色.

那么HighlightingColorizer在开始着色之前重置所有先前突出显示的整个文档是什么?

或者还有什么问题呢?我怎样才能正确级联2 HighlightingColorizers

.net c# avalonedit

67
推荐指数
1
解决办法
2552
查看次数

使用MVVM双向绑定到AvalonEdit文档文本

我想在TextEditor我的MVVM应用程序中包含一个AvalonEdit 控件.我要求的第一件事是能够绑定到TextEditor.Text属性,以便我可以显示文本.为此,我遵循了Make AvalonEdit MVVM兼容的示例.现在,我已使用接受的答案作为模板实现了以下类

public sealed class MvvmTextEditor : TextEditor, INotifyPropertyChanged
{
    public static readonly DependencyProperty TextProperty =
         DependencyProperty.Register("Text", typeof(string), typeof(MvvmTextEditor),
         new PropertyMetadata((obj, args) =>
             {
                 MvvmTextEditor target = (MvvmTextEditor)obj;
                 target.Text = (string)args.NewValue;
             })
        );

    public new string Text
    {
        get { return base.Text; }
        set { base.Text = value; }
    }

    protected override void OnTextChanged(EventArgs e)
    {
        RaisePropertyChanged("Text");
        base.OnTextChanged(e);
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void RaisePropertyChanged(string info)
    {
        if (PropertyChanged != null) …
Run Code Online (Sandbox Code Playgroud)

c# wpf binding mvvm avalonedit

27
推荐指数
3
解决办法
1万
查看次数

如何创建AvalonEdit语法文件(.xshd)并将其嵌入到我的程序集中?

我正在尝试为AvalonEdit定义一些自定义突出显示规则.似乎没有任何相关的文档 - 有关于文件格式一些文档,但没有关于如何在创建它之后实际加载和使用该定义的文档.

" 语法高亮 "维基页面(对于旧的WinForms TextEditor)记录了如何从磁盘上的.xshd文件加载突出显示定义,但我宁愿将其作为资源嵌入,就像AvalonEdit对其内置定义一样.

我查看了加载其内置荧光笔的ICSharpCode.AvalonEdit项目中的代码,但实际的"资源加载"代码是在DefaultHighlightingManager.LoadHighlighting中完成的,这是私有的 - 为了使事情变得怪异,显然只在发布版本中调用.

我可以不停地摸索,从私有方法中复制/粘贴一些代码,并尝试将可能或可能不起作用的东西拼凑在一起,但似乎值得问一下:这样做的标准方法是什么?是否有推荐的方法让第三方代码从资源加载突出显示定义?


Daniel的回答给了我一个良好的开端,但你需要在传递给GetManifestResourceStream的字符串中包含命名空间名称 - 如果不这样做,你将得到一个NullReferenceException(因为它返回一个空流).

我最后将一个名为ResourceLoader的静态类添加到与.xshd文件相同的项目文件夹中,使用此方法:

public static IHighlightingDefinition LoadHighlightingDefinition(
    string resourceName)
{
    var type = typeof(ResourceLoader);
    var fullName = type.Namespace + "." + resourceName;
    using (var stream = type.Assembly.GetManifestResourceStream(fullName))
    using (var reader = new XmlTextReader(stream))
        return HighlightingLoader.Load(reader, HighlightingManager.Instance);
}
Run Code Online (Sandbox Code Playgroud)

然后我就可以打电话了ResourceLoader.LoadHighlightingDefinition("Name.xshd").

对于在家中跟随的任何人,.xshd文件需要将其Build Action设置为Embedded Resource.

syntax-highlighting avalonedit

22
推荐指数
3
解决办法
1万
查看次数

WPF AvalonEdit SQL xhsd请求

我已经在互联网上看了(一遍又一遍),我找不到AvalonEdit的SQL.vshd文件,我使用了旧的格式版本,但它使编辑器出错(它根本不再显示) ,所以我想知道也许有人做过这样的文件,因为我不想浪费时间做这个,如果它已经完成了.

如果你可以与我分享你的赞赏:)

提前致谢

.net c# sql wpf avalonedit

20
推荐指数
2
解决办法
7745
查看次数

使AvalonEdit MVVM兼容

我正在尝试在我的WPF应用程序中使Avalon MVVM兼容.从谷歌搜索,我发现AvalonEdit不是MVVM友好的,我需要通过创建一个派生自TextEditor的类然后添加必要的依赖属性来导出AvalonEdit的状态.我担心Herr Grunwald 在这里的回答让我很失落:

如果你真的需要使用MVVM导出编辑器的状态,那么我建议你创建一个派生自TextEditor的类,它添加必要的依赖属性并将它们与AvalonEdit中的实际属性同步.

有没有人有一个例子或有关如何实现这一目标的好建议?

.net c# wpf mvvm avalonedit

18
推荐指数
2
解决办法
9524
查看次数

在wpf应用程序中嵌入word 2010编辑器

如何在WPF应用程序中使用单词编辑器?是否可以仅使用WPF中的Windows窗体托管?还有另一种方法可以实现吗?

我找到了AvalonEdit,但它没有我需要的功能.所以使用这种方式,我的问题可能无法解决.

还有一些东西在WPF中托管Windows窗体控件,但它不是我的答案.

我想知道有没有办法在wpf应用程序中以原生方式使用word编辑器?是否所有API都可以在该解决方案中使用?

提前致谢.

wpf ms-word editor ms-office avalonedit

17
推荐指数
2
解决办法
1万
查看次数

如何将此WPF控件添加到我的WinForm中?

我知道,我必须用一个ElementHost显示在WinForm的WPF控件,但由于WPF控件是第三方软件,而且只配备了一个XML文件和DLL文件.

控件是AvalonEdit,我将两个ICSharpCode.AvalonEdit.xmlICSharpCode.AvalonEdit.dll文件添加到我的项目中,然后我去了Project -> Add Reference并添加了DLL作为参考.现在我可以ICSharpCode在我的代码中访问命名空间,所有的类和方法都暴露出来,但从这一点来说,我不确定如何在我的WinForm中实际使用该控件.

我期待WPF控件出现在解决方案资源管理器中,但事实并非如此.我尝试将ElementHost控件添加到我的WinForm,但是当我尝试选择托管内容时,没有控件出现,所以它不知道我的WPF控件.如何在WinForm中使用AvalonEdit WPF控件?

c# wpf winforms avalonedit

16
推荐指数
2
解决办法
9312
查看次数

AvalonEdit:即使没有聚焦,也要突出显示当前行

我正在使用AvalonEdit,我希望用户始终能够看到插入符号所在的行,即使编辑器没有焦点.为此,我发现并修改了一些使用BackgroundRenderer突出显示当前行背景的代码.

不幸的是,如果我在编辑器未聚焦时更改了CaretOffset,那么我的背景矩形会保持不变,在编辑器失去焦点的当前行上.在编辑器再次获得焦点之前,它不会同步到新的当前行.

我弄清楚为什么会发生这种情况(只是没有解决方法).根据IBackgroundRenderer的文档注释,"背景渲染器将仅在其关联的已知图层选择绘制它们时绘制.例如,当插入符号被隐藏时,插入符层中的背景渲染器将不可见." 我的背景渲染器存在于KnownLayer.Caret上,所以是的,我知道为什么当编辑器没有聚焦时它没有更新 - 这是因为插入符也被隐藏了.(鉴于此,我真的很惊讶我的矩形保持可见.)

我在设置CaretOffset后立即尝试显式调用textEditor.TextArea.TextView.InvalidateLayer(KnownLayer.Caret),但这没有效果 - 我猜这个调用被忽略了,因为插入符被隐藏了.

即使编辑器没有焦点,强制当前行高亮显示更新的最佳方法是什么?


这是我班级的代码.如果有更好的方法,我当然愿意放弃这种做法并采取不同的方法.

public class HighlightCurrentLineBackgroundRenderer : IBackgroundRenderer
{
    private TextEditor _editor;

    public HighlightCurrentLineBackgroundRenderer(TextEditor editor)
    {
        _editor = editor;
    }

    public KnownLayer Layer
    {
        get { return KnownLayer.Caret; }
    }

    public void Draw(TextView textView, DrawingContext drawingContext)
    {
        if (_editor.Document == null)
            return;

        textView.EnsureVisualLines();
        var currentLine = _editor.Document.GetLineByOffset(_editor.CaretOffset);
        foreach (var rect in BackgroundGeometryBuilder.GetRectsForSegment(textView, currentLine))
        {
            drawingContext.DrawRectangle(
                new SolidColorBrush(Color.FromArgb(0x40, 0, 0, 0xFF)), null,
                new Rect(rect.Location, new Size(textView.ActualWidth - 32, rect.Height)));
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c# avalonedit

15
推荐指数
1
解决办法
5667
查看次数

ScintillaNET与AvalonEdit一起为WPF应用程序提供脚本接口

我正在开发一个项目,其中包括为我的WPF(.Net4)Windows应用程序实现脚本接口.我很好奇是否有人可以建议一个首选的编辑器,AvalonEdit vs ScintillaNET.一个人的任何陷阱和优势.我们需要支持C#和IronPython作为脚本语言.(至少这是最初的计划.我们可能最终确定其中一个).

ScintillaNET的一个缺点是它只是一个围绕本机(非托管)Scintilla的托管包装器.当与WPF4一起使用时,这是否会导致任何问题.

任何指针和建议都表示赞赏.

c# scripting ironpython scintilla avalonedit

15
推荐指数
1
解决办法
8337
查看次数

AvalonEdit:TextEditor是否具有快速搜索/替换功能?

我用AvalonEdit:TextEditor.我可以为此控件启用快速搜索对话框(例如在Ctrl-F上)吗?或者也许有人将搜索词的代码转换为 AvalonEdit:TextEditor文本?

c# search avalonedit

12
推荐指数
3
解决办法
6152
查看次数