我正在编写一些涉及 Adorners 的 WPF 代码。我正在使用 Josh Smith 的 UIElementAdorner.cs(在他的Infragistics 博客上的项目中找到)。我用信息文本的简介来装饰。我需要巧妙地放置我的装饰器,以免它从屏幕上剪掉。
确定我是否要剪辑的最佳方法是什么?
我正在使用以下代码来创建和放置我的装饰器。我有一个有趣的感觉,基于我是否会剪辑AdornerLayer并不是最好的选择。
var infoBubble = new InfoBubble {InformationText = @"I like cheese."};
var adornedElementRect = new Rect(Target.DesiredSize);
var layer = AdornerLayer.GetAdornerLayer(Target);
var adorner = new UiElementAdorner<Control>(Target) { Child = infoBubble };
adorner.Measure(new Size(layer.ActualWidth, layer.ActualHeight));
var adornerRect = new Rect(adorner.DesiredSize);
var top = -1*(adornerRect.Height);
var left = adornedElementRect.Width/2;
// Using layer to judge where to place the adorner
var upperLeftPoint = Target.TranslatePoint(new Point(left, top), layer);
var lowerRightPoint = Target.TranslatePoint(new Point(left + adornerRect.Width,
top + adornerRect.Height), layer);
if (upperLeftPoint.Y < 0) top -= upperLeftPoint.Y; // shift down by Y
if (lowerRightPoint.X > layer.ActualWidth)
left -= (lowerRightPoint.X - layer.ActualWidth); // shift left
请记住,此代码包含在TargetedTriggerAction中,设计人员(也称为 Blend 的用户)希望在某些 UI 元素上方显示信息时使用该代码。因此,这段代码对要装饰的元素或其环境知之甚少。