DrawingContext
クラスを使用して、メソッドを使用してadornedElementに装飾者を正常に追加することができましたDrawRectangle()
。
テキストボックスと画像を内部に含むスタックパネルを作成し、これを装飾者として割り当てることは可能ですか?
ちなみに、私はVisualStudio2010を使用しています。MicrosoftExpressionではありません。
どうもありがとう、
ダン
DrawingContext
クラスを使用して、メソッドを使用してadornedElementに装飾者を正常に追加することができましたDrawRectangle()
。
テキストボックスと画像を内部に含むスタックパネルを作成し、これを装飾者として割り当てることは可能ですか?
ちなみに、私はVisualStudio2010を使用しています。MicrosoftExpressionではありません。
どうもありがとう、
ダン
いいえ、DrawingContextはVisualsを描画することのみを目的としており、FrameworkElementsを描画することを目的としていないため、これはそのままでは不可能です。あなたができることは、FrameworkElementsを描画できる独自のAdornerを作成することです。
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の作成をAdornerに直接組み込むこともできます。それはあなたのシナリオに依存します。