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

问题描述 投票:0回答:1

我正在通过遵循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只是一个标准的cs文件,具有36行)。

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

编辑:我使用相同的模板设置了一个项目,但是使用了背后的代码而不是绑定。这按预期工作。因此,问题出在caliburn.micro和telerik的绑定中。

感谢您的任何帮助。

c# mvvm telerik caliburn.micro
1个回答
1
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.