0

実行時にメイン ルール セットに新しい Keywords オブジェクトを追加します。ただし、これらのキーワードを除いて、他のルールは適切に色付けされています。

実行時にロードされた単語が強調表示されない理由を誰か説明できますか?

using (Stream stream = typeof(Window1).Assembly.GetManifestResourceStream("testAvalonEdit.MyLang.xshd")) {
    using (XmlReader reader = new XmlTextReader(stream)) {
        xshd = HighlightingLoader.LoadXshd(reader);
        customHighlighting = HighlightingLoader.Load(xshd, HighlightingManager.Instance);
        updateStandardParametersList();
    }
}
HighlightingManager.Instance.RegisterHighlighting("MyLang Highlighting", new string[ { ".s" }, customHighlighting);


ここで、強調表示されているメソッドは次のとおりです。

void updateStandardParametersList() {
    //find existing color. It exists for sure.
    XshdColor existingColor = xshd.Elements.OfType<XshdColor>().Where(xc => string.Equals(xc.Name, "StandardParametersColor", StringComparison.CurrentCultureIgnoreCase)).First();

    XshdKeywords newKeyWords = new XshdKeywords();
    newKeyWords.ColorReference = new XshdReference<XshdColor>(existingColor);

    //I add new words to the Keywords object
    for(int i = 1; i < 25; i++)
        newKeyWords.Words.Add("A000" + i.ToString("00"));
    for(int i = 1; i < 25; i++)
        newKeyWords.Words.Add("B000" + i.ToString("00"));
    for(int i = 1; i < 5; i++)
        newKeyWords.Words.Add("C0000" + i);

    XshdRuleSet mainRuleSet = xshd.Elements.OfType<XshdRuleSet>().Where(o => string.IsNullOrEmpty(o.Name)).First();
    mainRuleSet.Elements.Add(newKeyWords);
}

ありがとう!


更新 1

ダニエルの提案を試した後、

xshd = HighlightingLoader.LoadXshd(reader);
updateStandardParametersList();
customHighlighting = HighlightingLoader.Load(xshd, HighlightingManager.Instance);

私はこの例外を受け取ります:

ここに画像の説明を入力

では、なぜこの例外がスローされるのでしょうか。私がやろうとしているのは、Keywordsオブジェクトを追加し、その色を XSHD で定義済みの色に設定することだけです。

または、それは正しい方法ではありませんか?

4

1 に答える 1

2

この呼び出しは、オブジェクトに格納されている情報からHighlightingLoader.Load(xshd)を作成します。後でを変更すると、はそれらの変更を認識しません。IHighlightingDefinitionxshdxshdIHighlightingDefinition

この問題を解決するHighlightingLoader.Load()には、強調表示の更新が完了した後にのみ呼び出します。

    xshd = HighlightingLoader.LoadXshd(reader);
    updateStandardParametersList();
    customHighlighting = HighlightingLoader.Load(xshd, HighlightingManager.Instance);

重複する色の例外: 式new XshdReference<XshdColor>(existingColor)は、keywords 要素でインラインで定義されている XSHD 色に対応します (これは色の定義であり、単なる参照ではありません)。したがって、色には複数の定義があります。

既存の名前付きカラーへの参照を作成するには、次を使用します。

    newKeyWords.ColorReference = new XshdReference<XshdColor>(null, "StandardParametersColor");
于 2014-04-23T17:28:26.157 に答える