我在运行时向主规则集添加了一个新的关键字对象。但除了那些关键字之外,其他规则都正确着色。
谁能解释为什么在运行时加载的单词没有突出显示?
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 中的预定义颜色。
或者,这不是正确的方法吗?