Visual Studio ViewportRelative Adornment图层未对齐到顶部

时间:2015-07-15 07:54:22

标签: visual-studio vsix vs-extensibility

我在Visual Studio 2015 RC

中添加了一个控件到装饰层
[Export(typeof(AdornmentLayerDefinition))]
[Name(Constants.LAUNCH_ADORNMENT_LAYER)]
[Order(After = PredefinedAdornmentLayers.Caret)]
public static AdornmentLayerDefinition LaunchAdornmentLayer = null;

// ...

_layer = textView.GetAdornmentLayer(Constants.LAUNCH_ADORNMENT_LAYER);
_layer.AddAdornment(AdornmentPositioningBehavior.ViewportRelative, null, null, _launchControl, null);

它可以在我的一台机器上正常工作,但在另一台机器上,控件位于屏幕上的任意位置,通常很低,控件的某些部分被屏幕底部剪掉。向上和向下滚动文档不会影响装饰的位置。

使用实时视觉树,我发现装饰层没有与顶部对齐(_launchControl所在的红色矩形轮廓,因为它被VS隐藏了)

screenshot

我尝试将元素强行推向顶部,但未成功。它使装饰层相对于卷轴的位置定位(因此当我滚动时它会从屏幕上消失)

Canvas.SetTop(_launchControl, 0d);
Canvas.SetTop(_layer as System.Windows.UIElement, 0d);

我使用AddAdornment错了吗? 如何将装饰图层的位置固定在视口顶部

1 个答案:

答案 0 :(得分:1)

为了获得正确的对齐方式,必须将 top 设置为包含文本视图的ViewportTop属性:

_layer.AddAdornment(AdornmentPositioningBehavior.ViewportRelative, null, null, _launchControl, null);
Canvas.SetTop(_launchControl, _textView.ViewportTop);