在编写 Visual Studio 扩展时,有什么方法可以影响它为 c# 呈现地图模式滚动条的方式?
问问题
545 次
1 回答
5
我没有时间给出完整的答案,但我会写一个简短的答案,因为网上关于它的信息几乎为零:
- 创建 VSIX 解决方案。
- 添加项目并在“可扩展性”类别中选择“编辑器边距”
在执行第 2 步后在边距文件旁边创建的“[yourEditorMarginName]Factory.cs”文件中,设置以下行:
[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
你可以通过这种方式获得变量:public ScrollbarMargin(IWpfTextView textView, IWpfTextViewMargin marginContainer/*, MarginCore marginCore*/) { ITextViewMargin scrollBarMargin = marginContainer.GetTextViewMargin(PredefinedMarginNames.VerticalScrollBar); ScrollBar = (IVerticalScrollBar)scrollBarMargin;
于 2016-09-02T05:52:11.530 回答