我在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隐藏了)
我尝试将元素强行推向顶部,但未成功。它使装饰层相对于卷轴的位置定位(因此当我滚动时它会从屏幕上消失)
Canvas.SetTop(_launchControl, 0d);
Canvas.SetTop(_layer as System.Windows.UIElement, 0d);
我使用AddAdornment
错了吗? 如何将装饰图层的位置固定在视口顶部?
答案 0 :(得分:1)
为了获得正确的对齐方式,必须将 top 设置为包含文本视图的ViewportTop
属性:
_layer.AddAdornment(AdornmentPositioningBehavior.ViewportRelative, null, null, _launchControl, null);
Canvas.SetTop(_launchControl, _textView.ViewportTop);