[英]DrawingContext adorner - possible to draw stackpanel?
Using the DrawingContext
class I've been able to use the DrawRectangle()
method to successfully add an adorner to my adornedElement. 使用
DrawingContext
类,我已经能够使用DrawRectangle()
方法成功地将adorner添加到我的adornedElement。
Is it possible to construct a stackpanel, with a textbox and image inside - and assign this as the adorner? 是否可以构建一个堆栈面板,内部有文本框和图像 - 并将其指定为装饰器?
I'm using visual studio 2010 by the way - not microsoft expression. 我顺便使用visual studio 2010 - 而不是微软表达。
Thanks a lot, 非常感谢,
Dan 担
No, this is not possible out of the box as the DrawingContext is only meant to draw Visuals and no FrameworkElements. 不,这是不可能的开箱即用,因为DrawingContext只是为了绘制Visuals而不是FrameworkElements。 What you can do is create your own Adorner which is able to draw FrameworkElements:
你可以做的是创建自己的Adorner,它能够绘制FrameworkElements:
public class FrameworkElementAdorner : Adorner
{
private FrameworkElement _child;
public FrameworkElementAdorner(UIElement adornedElement)
: base(adornedElement)
{
}
protected override int VisualChildrenCount
{
get { return 1; }
}
public FrameworkElement Child
{
get { return _child; }
set
{
if (_child != null)
{
RemoveVisualChild(_child);
}
_child = value;
if (_child != null)
{
AddVisualChild(_child);
}
}
}
protected override Visual GetVisualChild(int index)
{
if (index != 0) throw new ArgumentOutOfRangeException();
return _child;
}
protected override Size MeasureOverride(Size constraint)
{
_child.Measure(constraint);
return _child.DesiredSize;
}
protected override Size ArrangeOverride(Size finalSize)
{
_child.Arrange(new Rect(new Point(0, 0), finalSize));
return new Size(_child.ActualWidth, _child.ActualHeight);
}
}
Usage: 用法:
var fweAdorner = new FrameworkElementAdorner(adornedElement);
//Create your own Content, here: a StackPanel with some stuff inside
var stackPanel = new StackPanel();
stackPanel.Children.Add(new TextBox() { Text="TEST"});
stackPanel.Children.Add(new Image());
fweAdorner.Child = stackPanel;
var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement);
adornerLayer.Add(fweAdorner);
You could also incorporate the creation of the StackPanel directly in the Adorner if you use this combination of a StackPanel multiple times. 如果多次使用StackPanel的这种组合,您还可以直接在Adorner中创建StackPanel。 That depends on your scenario.
这取决于你的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.