2016-11-26 3 views
1

WPFアプリケーションでは、WindowsFormsHostを1つのグリッドに追加しました.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は残りのウィンドウとは別にレンダリングされ、必要に応じてウィンドウの上にレンダリングされます。一見すると、これはあなたが何もできない設計上の制限のようです。しかし、厳密にはそうではありません。

最初のレイヤーに2番目のレイヤーが追加された場合は、2番目のレイヤーの上に3番目のレイヤーを追加するだけです。別のウィンドウまたはポップアップをWindowsFormsHostの上にレンダリングすることができます。また、すべてのウィンドウが同じウィンドウの一部に見えるようにするために、いくつかのフープを飛び越えなければならない間に、すべての移動、最小化、それは確かに可能です。

3つ目のレイヤーで透明度を使用すると、WindowsFormsHost内のコンテンツを表示してアクセスすることができます。たとえば、WPFポップアップでAllowsTransparencyをtrueに設定できます。余分な作業が必要になりますが、この機能が絶対に必要な場合は、それを行うことができます。

関連する問題