2016-11-26 80 views
1

在我的WPF應用程序中,我在一個網格中添加了WindowsFormsHost,我想在WinFormsHost中的控件上繪製一個矩形。無法使用WPF中的裝飾在WindowsFormsHost上繪製矩形

應用佈局:我想

Application Layout Image

代碼:

裝飾器類

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); 
     } 
    } 

代碼添加裝飾器

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

是否有任何可能的方式來繪製在WindowsFormsHost內的控制矩形?

在此先感謝。

+1

請參閱:http://stackoverflow.com/q/9920480/1136211 – Clemens

回答

0

正如Clemens的評論中指出的那樣,WindowsFormsHost與窗口的其餘部分分開呈現,並且必要時它會呈現在窗口頂部。乍一看,這似乎是一個設計限制,你無法做任何事情;然而,這並不完全正確。

如果在第一層上添加第二層,只需在第二層上添加第三層即可。另一個窗口或彈出窗口可以在WindowsFormsHost的頂部渲染,並且您必須跳過一些環節才能使它看起來像是同一個窗口的一部分 - 確保一切都在同時移動,最小化和恢復,等 - 這當然是可以的。

您可以在第三層使用透明度來允許顯示和訪問WindowsFormsHost中的內容。例如,您可以在WPF Popup上將AllowsTransparency設置爲true。這將有點額外的工作,但如果你絕對需要這個功能,你可以做到這一點。