Я пишу код WPF с участием Adorners.Я использую файл UIElementAdorner.cs Джоша Смита (см. Проект в его блоге по инфраструктуре ).Я украшаю рекламный текст.Мне нужно аккуратно разместить своего рекламодателя, чтобы он не отрывался от экрана.
Какой лучший способ узнать, собираюсь ли я обрезать?
Я использую следующий код для создания и размещения своего рекламодателя.У меня странное чувство, что, основываясь на том, скопирую я 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), когда они хотят, чтобы информация всплывала над некоторыми элементами пользовательского интерфейса.Таким образом, этот код будет очень мало знать об элементе, который нужно украсить, или его среде.