Telerik RadSyntaxEditor 不加载或突出显示文本

Telerik RadSyntaxEditor does not load or highlight text

我正在尝试按照 this guide.

使用 Telerik 的新 RadSyntaxEditor

这是我创建的代码:

    private RadSyntaxEditor _syntaxEditor;

    public RadSyntaxEditor SyntaxEditor
    {
        get => _syntaxEditor;
        set
        {
            if (Equals(value, _syntaxEditor)) return;
            _syntaxEditor = value;
            OnPropertyChanged();
        }
    }

    public CodeEditorViewModel()
    {
        SyntaxEditor = new RadSyntaxEditor();

    }

    public void Test()
    {
        using (StreamReader reader = new StreamReader("../../ViewModels/ShellViewModel.cs", Encoding.UTF8))
        {
            SyntaxEditor.Document = new TextDocument(reader);
        }
        var cSharpTagger = new CSharpTagger(SyntaxEditor);
        SyntaxEditor.TaggersRegistry.RegisterTagger(cSharpTagger);
    }

我的 xaml 文件:

<UserControl x:Class="CodeEditorControl.Views.CodeEditorView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
             mc:Ignorable="d" >
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Button x:Name="Test" Grid.Row="0">Test</Button>
        <telerik:RadSyntaxEditor  x:Name="SyntaxEditor"  Grid.Row="1"/>
    </Grid>
</UserControl>

控件显示没有问题并且正在响应输入等。 但是既没有加载文档,也没有任何语法突出显示。 Reader 加载正确并且 ReadToEnd() 输出正确的文本(ShellViewModel 只是一个标准的 36 行 cs 文件)。

我正在使用 caliburn.micro 和 MVVM 设计。

编辑:我使用相同的模板设置了一个项目,但使用代码隐藏而不是绑定。这按预期工作。所以问题在于 caliburn.micro 和 telerik 的绑定。

感谢任何帮助。

我注意到 CodeEditorViewModel 中的 属性 是 RadSyntaxEditor 类型,对应的 UI 元素也是 RadSytanxEditor。请注意,这会在 Visual Studio 的输出窗格中产生绑定错误。我认为 Caliburn.Micro 绑定引擎无法创建这种类型的关系,目前有两个单独的 RadSyntaxEditor 实例。一个在 XAML 中定义,另一个在视图模型中定义。文档加载到代码中定义的那个,但是因为它从未在 UI 中使用过,所以在应用程序中没有任何内容。

要解决此问题,您可以研究 Caliburn.Micro 框架,更具体地说,如何使用命名约定将模型 属性 数据绑定到 [= 的相应 属性 29=] 元素。我认为当前绑定(通过约定)默认为 RadSyntaxEditor.

的可见性 属性

或者您可以像这样简单地使用显式数据绑定:

<Button x:Name="Test" Grid.Row="0">Test</Button>
<ContentControl  Content="{Binding SyntaxEditor}" Grid.Row="1"/>

请注意,我已将 RadSyntaxEditor 控件替换为 ContentControl