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
。
我正在尝试按照 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
。