[英]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.