2011-12-20 16 views
4

DrawingContextクラスを使用して、DrawRectangle()メソッドを使用してadornnerをadornedElementに追加できました。DrawingContext adorner - スタックパネルを描画することはできますか?

テキストボックスと画像を内部に持つスタックパネルを作成し、これをアドナーに割り当てることはできますか?

Microsoft Visual Studioではなく、Visual Studio 2010を使用しています。

どうもありがとう、

ダン

答えて

12

DrawingContextではのみビジュアルなし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); 

あなたはまた、Adornerに直接のStackPanelの作成を組み込むことができますStackPanelの複数回の組み合わせ。それはあなたのシナリオによって異なります。

+0

スヴェン、あなたに十分な仲間をありがとう!ストレートコピーし、私のソリューションに貼り付けて、それは魅力を動作させる!ありがとう! –

+0

あなたは歓迎です! – SvenG

+0

私と同じSven:あなたのコードは魅力的に機能しました!どうも !!! – Renaud

関連する問題