アプリのさまざまなことに System.Windows.Controls.WebBrowser を使用していますが、WebBrowser に表示されるはずの装飾が切り取られていることに気付きました。WebBrowser コントロールは実際には COM コンポーネントのラッパーであり、おそらくレンダリングが異なることを認識していますが、これを解決する方法を誰かが理解しているかどうか疑問に思いました。
これが私が見ている問題です。ここでは、何かの上隅に (サンプルとして) 大きな赤い円を描画することになっているサンプル adorner を示します。
これで 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 に関する別の質問を 1 つまたは 2 つ見たことがありますが、WebControl に実装できるように見えるものは何も見られませんが、うまくいけば、これは有益な情報です誰か。