Telerik RadSyntaxEditor не загружает и не выделяет текст - PullRequest
0 голосов
/ 11 декабря 2019

Я пытаюсь использовать новый RadSyntaxEditor от Telerik, следуя этому руководству .

Это код, который я создал:

    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 design.

Редактировать:Я создал проект с тем же шаблоном, но использовал код вместо привязки. Это работает как задумано. Таким образом, проблема лежит в привязке от caliburn.micro и telerik.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 16 декабря 2019

Я заметил, что свойство в CodeEditorViewModel имеет тип RadSyntaxEditor, и соответствующий элемент пользовательского интерфейса также RadSytanxEditor. Обратите внимание, что это приводит к ошибке привязки в области вывода Visual Studio. Я думаю, что механизм связывания Caliburn.Micro не может создать этот тип отношений, и в настоящее время существует два отдельных экземпляра RadSyntaxEditor. Один определен в XAML, а другой определен в модели представления. Документ загружается в тот, который определен в коде, но поскольку он никогда не используется в пользовательском интерфейсе, в приложении ничего нет.

Чтобы решить эту проблему, вы можете исследовать инфраструктуру Caliburn.Micro и, в частности, узнать, какчтобы использовать соглашения об именах к данным, свяжите свойство модели с соответствующим свойством элемента пользовательского интерфейса. Я думаю, что текущая привязка (через соглашение) по умолчанию имеет свойство Visibility RadSyntaxEditor.

. Или вы можете просто использовать явную привязку данных, например:

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

Обратите внимание, что язаменил элемент управления RadSyntaxEditor на ContentControl.

...