Отобразите Adorner по управлению WebBrowser

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

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

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

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

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

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, который я посмотрел относительно другой вопрос или два adorners и hwndsources, но я не вижу ничего, что похоже, я мог реализовать его для WebControl, но надо надеяться это - полезная информация для кого-то.

6
задан Community 8 February 2017 в 14:21
поделиться

2 ответа

Чтобы сделать Process.Start использовать exec непосредственно вместо использования механизма OS 'для открытия файлов, необходимо установить для UseShellExecute значение false. Это также справедливо для Linux и Windows.

Process.Start(new ProcessStartInfo (
    "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
    "--no-first-run")
    { UseShellExecute = false });

Обратите внимание, что для правильного запуска набора приложений Chrome можно использовать «open». Используйте аргумент «-a» для принудительного запуска определенного приложения, аргумент «-n» для открытия нового экземпляра и «--args» для передачи аргументов:

Process.Start(new ProcessStartInfo (
    "open",
    "-a '/Applications/Google Chrome.app' -n --args --no-first-run")
    { UseShellExecute = false });
-121--1537532-

В C:

#include <string.h> // memcpy
#include <stdlib.h> //realloc

В C++ удалите .h и префикс с c . В C++ они будут помещены в пространство имен std , но также будут глобальными.

-121--2520862-

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

5
ответ дан 9 December 2019 в 22:33
поделиться

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

1
ответ дан 9 December 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: