2016-11-26 2 views
1

WPF 응용 프로그램에서 WindowsFormsHost를 하나의 표에 추가했으며 WinFormsHost 내의 컨트롤에 사각형을 그립니다.WPF에있는 Adorners를 사용하여 WindowsFormsHost에 사각형을 그릴 수 없습니다.

응용 프로그램 레이아웃 : 나는 시도하고

Application Layout Image

코드 :

Adorner 클래스

public class SimpleRectAdorner : Adorner 
    { 
     // Be sure to call the base class constructor. 
     public SimpleRectAdorner(UIElement adornedElement) 
      : base(adornedElement) 
     { 
     } 

     // A common way to implement an adorner's rendering behavior is to override the OnRender 
     // method, which is called by the layout system as part of a rendering pass. 
     protected override void OnRender(DrawingContext drawingContext) 
     { 
      Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize); 

      // Some arbitrary drawing implements. 
      SolidColorBrush renderBrush = new SolidColorBrush(Colors.Green); 
      renderBrush.Opacity = 0.2; 
      Pen renderPen = new Pen(new SolidColorBrush(Colors.Navy), 1.5); 

      // Draw a circle at each corner. 
      Rect rect = new Rect(new Point(adornedElementRect.TopLeft.X, adornedElementRect.TopLeft.Y + 50), new Size(150, 50)); 
      drawingContext.DrawRectangle(renderBrush, renderPen, rect); 
     } 
    } 

코드 adorner

를 추가
private void btnDraw_Click(object sender, RoutedEventArgs e) 
     { 
      AdornerLayer.GetAdornerLayer(viewerGrid.Children[0]).Add(new SimpleRectAdorner(viewerGrid.Children[0])); 
     } 

WindowsFormsHost 안에있는 Control에 사각형을 그릴 수 있습니까?

미리 감사드립니다.

+1

참조 : http://stackoverflow.com/q/9920480/1136211 – Clemens

답변

0

Clemens의 설명에서 언급했듯이 WindowsFormsHost는 나머지 Window와 별도로 렌더링되며 필요에 따라 Window 상단에 렌더링됩니다. 언뜻보기에, 이것은 당신이 아무것도 할 수없는 디자인 제한 인 것 같습니다. 그러나 그것은 엄격하게 사실이 아닙니다.

첫 번째 레이어 위에 두 번째 레이어가 추가되면 두 번째 레이어 위에 세 번째 레이어를 추가하기 만하면됩니다. 다른 창이나 팝업 창은 WindowsFormsHost의 맨 위에 렌더링 할 수 있으며 모든 창을 동일한 창에 표시되도록 일부 농구대를 뛰어 넘어야하지만 동시에 모든 항목이 이동하고 최소화 및 복원되므로, 등등 - 확실히 그렇게 할 수 있습니다.

세 번째 레이어에서 투명도를 사용하면 WindowsFormsHost의 콘텐츠를 표시하고 액세스 할 수 있습니다. 예를 들어 WPF 팝업에서 AllowsTransparency를 true로 설정할 수 있습니다. 약간의 추가 작업이 필요하지만이 기능이 절대적으로 필요한 경우 수행 할 수 있습니다.

관련 문제