4
使用DrawingContext
類我已經能夠使用DrawRectangle()
方法成功地向我的adornedElement添加裝飾器。DrawingContext裝飾者 - 可能繪製堆疊面板?
是否有可能構建一個帶有文本框和圖像的堆棧面板 - 並將其指定爲裝飾者?
我使用visual studio 2010的方式 - 而不是微軟的表達。
非常感謝,
丹
使用DrawingContext
類我已經能夠使用DrawRectangle()
方法成功地向我的adornedElement添加裝飾器。DrawingContext裝飾者 - 可能繪製堆疊面板?
是否有可能構建一個帶有文本框和圖像的堆棧面板 - 並將其指定爲裝飾者?
我使用visual studio 2010的方式 - 而不是微軟的表達。
非常感謝,
丹
沒有,這是不可能的開箱作爲的DrawingContext只是爲了畫的視覺效果和無FrameworkElements。 你可以做的是建立自己的裝飾器,它能夠得出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);
}
}
用法:
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);
你也可以直接納入的StackPanel的創作裝飾器,如果你使用這個組合一個StackPanel多次。這取決於你的情況。
斯文,不能感謝你足夠的隊友!直接複製並粘貼到我的解決方案中,它的魅力!謝謝! – 2011-12-20 14:36:13
不客氣! – SvenG 2011-12-20 14:38:04
我也一樣Sven:你的代碼像魅力一樣工作!謝謝 !!! – Renaud 2012-04-13 15:29:48