11

コード内の AvalonEdit の構文強調表示を変更したいと考えています。

XAML:

 <avalonEdit:TextEditor Name="textEditor" SyntaxHighlighting="{Binding syntaxHighlighting}" />

C#:

public string syntaxHighlighting { get; set; }

public MainWindow()
{
     InitializeComponent();
     syntaxHighlighting = "C#";
     DataContext = this;
}

ただし、構文の強調表示は変更されません。私は何を間違っていますか?私の問題に対するより良い解決策はありますか?

4

5 に答える 5

2

文字列にバインドする場合は、IValueConverter を定義して、組み込みの HighlightingDefinitionTypeConverter をラップできます。

using System;
using System.Globalization;
using System.Windows.Data;
using ICSharpCode.AvalonEdit.Highlighting;

public class HighlightingDefinitionConverter : IValueConverter
{
    private static readonly HighlightingDefinitionTypeConverter Converter = new HighlightingDefinitionTypeConverter();

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Converter.ConvertFrom(value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Converter.ConvertToString(value);
    }
}

次に、コンバーターをバインディングに追加します。

<avalonEdit:TextEditor Name="textEditor" SyntaxHighlighting="{Binding syntaxHighlighting, Converter={StaticResource HighlightingDefinitionConverter}}" />
于 2015-07-24T16:01:38.797 に答える
1

TypeConverter を使用するだけです

var typeConverter = new HighlightingDefinitionTypeConverter();
var xmlSyntaxHighlighter = (IHighlightingDefinition)typeConverter.ConvertFrom("XML");
var csSyntaxHighlighter = (IHighlightingDefinition)typeConverter.ConvertFrom("C#");
CSharpEditor.SyntaxHighlighting = csSyntaxHighlighter;
XmlEditor.SyntaxHighlighting = xmlSyntaxHighlighter;
于 2014-02-26T10:28:05.393 に答える
0

syntaxHighlighting は文字列ではありません! コードがコンパイルされない可能性があります。ここで XAMLの SyntaxHighlighting は、文字列ではなく、SyntaxHighlighting のインスタンスをインスタンス化するマークアップ拡張機能を使用することに注意してください。

private void OnTabLoaded(object sender, RoutedEventArgs e)
{
   textEditor.SyntaxHighlighting = HighlightingLoader.Load(..., HighlightingManager.Instance);
   textEditor.SyntaxHighlighting.MainRuleSet=...
}

Sharpdevelopにアクセスして、ソース コードをダウンロードします。

于 2013-04-23T12:48:06.137 に答える