簡體   English   中英

無法在WPF中使用Adorners在WindowsFormsHost上繪制矩形

[英]Unable to draw rectangle on WindowsFormsHost using Adorners in WPF

在我的WPF應用程序中,我在一個網格中添加了WindowsFormsHost,我想在WinFormsHost內的控件上繪制一個矩形。

應用布局:

應用布局圖

代碼我正在嘗試:

Adorner Class

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中的Control上繪制一個矩形?

提前致謝。

正如Clemens的評論中所指出的,WindowsFormsHost與Window的其余部分分開呈現,並且必然會在Window的頂部呈現。 乍一看,這似乎是一個設計限制,你無能為力; 然而,這並非完全正確。

如果在第一層上添加第二層,只需在第二層上添加第三層。 另一個窗口或彈出窗口可以呈現在WindowsFormsHost的頂部,而你將不得不跳過一些箍,使它看起來像是同一個窗口的一部分 - 確保一切都在同一時間移動,最小化和恢復,等等 - 當然可以這樣做。

您可以在第三層中使用透明度,以允許顯示和訪問WindowsFormsHost中的內容。 例如,您可以在WPF彈出窗口中將AllowTransparency設置為true。 這將是一項額外的工作,但如果你絕對需要這個功能,你可以做到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM