Найти в Дзене
IT Works👍

[DevExspress] Подсветка синтаксиса Lua в RichEditControl в WPF+MVVM

Понадобилось мне на работе сделать редактор скриптов на Lua. Покопавшись в документации DevExpress, стало понятно, что нужно использовать RichEditControl. Для начала сделаем показ номера строки. В документации есть примеры, но они противоречат концепции MVVM: кода в отображении быть не должно. Отлично, воспользуемся тогда самописным Behavour: И вставляем в xaml: <dxre:RichEditControl DockPanel.Dock="Top" HorizontalRulerVisibility="Collapsed" VerticalRulerVisibility="Collapsed" ActiveViewType="Simple"> <dxmvvm:Interaction.Behaviors> <utils:SyntaxHighlightBehavior /> </dxmvvm:Interaction.Behaviors> </dxre:RichEditControl> Осталось создать сервис подсветки кода: Код на Github'е И добавить в наш Behavior в метод OnAttached: ISyntaxHighlightService service = new FormulaSyntaxHighlightService(AssociatedObject.Document); AssociatedObject.ReplaceService(service); Все, код на Lua подсвечивается и строки нумеруются: Спасибо за внимание!

Понадобилось мне на работе сделать редактор скриптов на Lua. Покопавшись в документации DevExpress, стало понятно, что нужно использовать RichEditControl.

Для начала сделаем показ номера строки. В документации есть примеры, но они противоречат концепции MVVM: кода в отображении быть не должно. Отлично, воспользуемся тогда самописным Behavour:

И вставляем в xaml:

<dxre:RichEditControl DockPanel.Dock="Top" HorizontalRulerVisibility="Collapsed" VerticalRulerVisibility="Collapsed" ActiveViewType="Simple">
<dxmvvm:Interaction.Behaviors>
<utils:SyntaxHighlightBehavior />
</dxmvvm:Interaction.Behaviors>
</dxre:RichEditControl>
Все, нумерация строк у нас есть
Все, нумерация строк у нас есть

Осталось создать сервис подсветки кода:

Код на Github'е

И добавить в наш Behavior в метод OnAttached:

ISyntaxHighlightService service = new FormulaSyntaxHighlightService(AssociatedObject.Document);
AssociatedObject.ReplaceService(service);

Все, код на Lua подсвечивается и строки нумеруются:

Код взял из примеров с сайта lua.org
Код взял из примеров с сайта lua.org

Спасибо за внимание!