问题:是否可以创建仅AdornerDecorator
我想要Adorner
的{{1}}?
AdornerLayer
如何在public class SimpleCircleBehavior : Behavior<TextBox>
{
private SimpleCircleAdorner sca;
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.Loaded += new RoutedEventHandler(AssociatedObject_Loaded);
}
void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
{
sca = new SimpleCircleAdorner(AssociatedObject);
AdornerLayer.GetAdornerLayer(AssociatedObject).Add(sca);
}
}
public class SimpleCircleAdorner : Adorner
{
// Be sure to call the base class constructor.
public SimpleCircleAdorner(UIElement adornedElement)
: base(adornedElement)
{
}
// A common way to implement an adorner's rendering behavior is to override the OnRender
// method, which is called by the layout system as part of a rendering pass.
protected override void OnRender(DrawingContext drawingContext)
{
Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize);
// Some arbitrary drawing implements.
SolidColorBrush renderBrush = new SolidColorBrush(Colors.Green);
renderBrush.Opacity = 0.2;
Pen renderPen = new Pen(new SolidColorBrush(Colors.Navy), 1.5);
double renderRadius = 5.0;
// Draw a circle at each corner.
drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopLeft, renderRadius, renderRadius);
drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopRight, renderRadius, renderRadius);
drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomLeft, renderRadius, renderRadius);
drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomRight, renderRadius, renderRadius);
}
}
中添加AdornerDecorator
,并将该装饰放入该图层?在行为内部,设计师不应该关心在所有元素上添加TextBox
...
最好只有此装饰品应该去那里,而不是偷走所有其他装饰品。
除非您创建AdornerDecorator
。而已!您无法事先知道它们出现在哪个层,它们的设计并不是那样的。这使整个事情变得非常痛苦。
想象一下,您正在创建仅适用于AdornerDecorator
的装饰器。要使其发挥作用,并按照TextBox
您需要的TextBox
AdornerDecorator
行事,让您的装扮者始终位于TextBox
之上。
AdornerDecorator
来装饰您即将装饰的元素?哦,是的,在装饰者的创作过程中,不是可能(不是我所知道的)。AdornerDecorator
,您仍然会遇到问题:窃取孩子们中的所有装饰者,并将其放入此图层。再次...... WTF!我怎么能假设所有子元素装饰者,即使是我没有创建过的元素装饰者,也应该进入这一层?换句话说,如果您没有专门知道所有子元素及其装饰者,则无法控制您的装饰者显示的图层。在创造无辜的洒水时,这完全是很多了解。
AdornerDecorator
,只抓取我们知道我们想要的装饰,其他人则会放到下一个“全球”AdornerDecorator。我不喜欢这种解决方法,但糟糕的设计决策有时需要非常难看的黑客......我想这次我们需要这个。