2011-12-20 4 views
4

DrawingContext 클래스를 사용하여 DrawRectangle() 메서드를 사용하여 adornner를 성공적으로 adornedElement에 추가 할 수있었습니다.DrawingContext adorner - 스택 패널을 그릴 수 있습니까?

텍스트 상자와 이미지가 포함 된 스택 패널을 구성 할 수 있습니까? - 이것을 adorner로 할당 할 수 있습니까?

Microsoft Visual Studio가 아닌 Visual Studio 2010을 사용하고 있습니다. DrawingContext 만 비주얼없이 FrameworkElements을 그리는 의미로

고마워,

답변

12

아니,이 상자 밖으로 수 없습니다. 당신이 할 수있는 일 는 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

스벤 (Sven), 충분한 친구를 사귈 수 없습니다! 똑바로 복사하여 내 솔루션에 붙여 넣고 매력을 작동! 감사! –

+0

당신은 반갑습니다! – SvenG

+0

나 같은데 Sven : 코드가 매력처럼 작동했습니다! 고마워 !!! – Renaud

관련 문제