Отображение Adorner через элемент управления WebBrowser - PullRequest
6 голосов
/ 17 февраля 2010

Я использую System.Windows.Controls.WebBrowser для различных вещей в своем приложении, и я заметил, что элементы декорации обрезаются, когда они должны появиться поверх WebBrowser.Я понимаю, что элемент управления WebBrowser действительно является оберткой вокруг COM-компонента и, вероятно, визуализируется по-другому, но мне было интересно, если кто-нибудь придумал, как решить эту проблему.

Это проблема, которую я вижу.Здесь у меня есть только образец рекламного элемента, который должен нарисовать большой красный круг в верхнем углу чего-либо (в качестве образца).

Когда я украшаю этим WebBrowser, я получаю такой результат:

image

Я ожидаю увидеть полный круг.

Вот код этого бесполезного рекламодателя, на случай, если это будет полезно:

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, но, надеюсь, это будет полезной информацией для кого-то.

Ответы [ 4 ]

5 голосов
/ 17 февраля 2010

Я не думаю, что это будет работать с Adroner, но вы можете перемещать контент через элемент управления WebBroswer, используя прозрачный элемент управления Popup. Более подробную информацию и образец кода можно найти здесь .

3 голосов
/ 24 декабря 2014

Вот мой блог post , представляющий библиотеку , которую я написал для наложения WPF-адорна на любой hwnd Простая демонстрация веб-браузера выглядит следующим образом: снимок http://i58.tinypic.com/kej3bd.png

2 голосов
/ 27 октября 2010

Это вызвано проблемами воздушного пространства . Поскольку WebBrowser является собственным элементом управления, не относящимся к WPF, нет способа напрямую визуализировать украшения (или другой контент WPF) поверх него.

Чтобы сделать это, вам нужно использовать какое-то отдельное окно и поместить содержимое в это отдельное окно. Обычно это означает использование прозрачного окна WPF, расположенного поверх основного окна. К сожалению, это не будет настолько интегрировано в решение, как могло бы обеспечить настоящий нативный элемент управления WPF.

1 голос
/ 27 февраля 2010

Попробуйте использовать другое прозрачное оверлейное окно TOP LEVEL . Конечно, поддерживается только в Windows 2000 и выше, в Win9x нет многоуровневых окон.

...