我在我的应用程序中使用 System.Windows.Controls.WebBrowser 来处理各种事情,我注意到当装饰器应该出现在 WebBrowser 上时,它们被切断了。我意识到 WebBrowser 控件实际上是一个 COM 组件的包装器,并且可能呈现不同的方式,但我想知道是否有人想出如何解决这个问题。
这是我看到的问题。在这里,我只有一个示例装饰器,它应该在某物的顶角绘制一个大红色圆圈(作为示例)。
当我用这个装饰 WebBrowser 时,我得到了这个结果:
我希望看到完整的圆圈。
这是这个毫无价值的装饰器的代码,以防万一:
public class SillyAdorner : Adorner
{
public SillyAdorner(UIElement element) : base(element)
{
}
protected override void OnRender(DrawingContext drawingContext)
{
drawingContext.DrawEllipse(new SolidColorBrush(Colors.Red), new Pen(), new Point(7, 7), 30, 30);
base.OnRender(drawingContext);
}
}
以下是我在主机控件的 OnRender 方法中将其应用到浏览器的方法:
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
var layer = AdornerLayer.GetAdornerLayer(browser);
layer.Add(new SillyAdorner(browser));
}
有人对此有任何技巧或解决方法吗?
编辑:我正在使用 .NET 4.0,如果这有所作为的话。
编辑#2:WebBrowser 似乎继承自 HwndHost,我已经看到另一个或两个关于装饰器和 hwndsources 的问题,但我没有看到任何看起来我可以为 WebControl 实现它的东西,但希望这是有用的信息某人。