C# полосы прокрутки украшений?
1 ответ
Решение
У меня нет времени на полный ответ, но я напишу короткий, потому что в нуле есть информация о нуле:
- Создать решение VSIX.
- Добавьте элемент и в категории "Расширяемость" выберите "Редактор полей"
В файле "[yourEditorMarginName]Factory.cs", который был создан рядом с файлом маржи после выполнения шага 2, установите следующие строки:
[MarginContainer(PredefinedMarginNames.VerticalScrollBar)] [Order(Before = PredefinedMarginNames.LineNumber)]
Вернитесь к файлу "[yourEditorMarginName].cs". Убедитесь, что вы удалили следующие строки в конструкторе:
this.Height = 20; this.ClipToBounds = true; this.Width = 200;
Теперь вы получили ссылку на IWpfTextView внутри конструктора, зарегистрируйтесь в его событии OnLayoutChanged (или используйте другое подходящее вам событие):
TextView.LayoutChanged += OnLayoutChanged;
В OnLayoutChanged вы можете сделать следующее, чтобы добавить украшение прямоугольника:
var rect = new Rectangle(); double bottom; double firstLineTop; MapLineToPixels([someLineYouNeedToHighlight], out firstLineTop, out bottom); SetTop(rect, firstLineTop); SetLeft(rect, 0); rect.Height = bottom - firstLineTop; rect.Width = [yourWidth]; Color color = [your Color]; rect.Fill = new SolidColorBrush(color); Children.Add(rect);
А вот MapLineToPixels():
private void MapLineToPixels(ITextSnapshotLine line, out double top, out double bottom) { double mapTop = ScrollBar.Map.GetCoordinateAtBufferPosition(line.Start) - 0.5; double mapBottom = ScrollBar.Map.GetCoordinateAtBufferPosition(line.End) + 0.5; top = Math.Round(ScrollBar.GetYCoordinateOfScrollMapPosition(mapTop)) - 2.0; bottom = Math.Round(ScrollBar.GetYCoordinateOfScrollMapPosition(mapBottom)) + 2.0; }
Ага
ScrollBar
переменная это то, что вы можете получить следующим образом:ScrollBar = (IVerticalScrollBar)scrollBarMargin;