Я пытаюсь определить некоторые пользовательские правила подсветки для AvalonEdit. Кажется, для этого нет никакой документации - есть некоторая документация по формату файла , но ничего о том, как на самом деле загрузить и использовать определение после его создания.
Вики-страница " Подсветка синтаксиса " (для старого WinForms TextEditor) описывает, как загрузить определения подсветки из файла .xshd на диск, но я бы предпочел внедрить его как ресурс, так же AvalonEdit делает со своими встроенными определениями.
Я посмотрел код в проекте ICSharpCode.AvalonEdit, который загружает свои встроенные маркеры, но фактический код «загрузки из ресурса» выполняется в DefaultHighlightingManager.LoadHighlighting, который является частным - и который, чтобы сделать более странные вещи, по-видимому, только в релизных сборках.
Я могу продолжать возиться, копировать / вставлять часть кода из закрытых методов и пытаться собрать воедино что-то, что может или не может работать, но, кажется, стоит спросить: Каков стандартный способ сделать это? Есть ли рекомендуемый способ для стороннего кода загрузить определение выделения из ресурса?
Ответ Даниэля дал мне хорошее начало, но вам нужно включить имя пространства имен в строку, которую вы передаете GetManifestResourceStream - если вы этого не сделаете, вы получите исключение NullReferenceException (потому что оно возвращает нулевой поток).
Я добавил статический класс ResourceLoader в ту же папку проекта, что и файл .xshd, с помощью этого метода:
public static IHighlightingDefinition LoadHighlightingDefinition(
string resourceName)
{
var type = typeof(ResourceLoader);
var fullName = type.Namespace + "." + resourceName;
using (var stream = type.Assembly.GetManifestResourceStream(fullName))
using (var reader = new XmlTextReader(stream))
return HighlightingLoader.Load(reader, HighlightingManager.Instance);
}
Тогда я могу просто позвонить ResourceLoader.LoadHighlightingDefinition("Name.xshd")
.
Для тех, кто следует дома, в файле .xshd должно быть установлено действие сборки для встроенного ресурса.