Я создаю много ChromiumWebBrowser-Instances программно внутри своего приложения. Через некоторое время я установил видимость и адрес для браузера. Также я хотел изменить уровень масштабирования. Но всякий раз, когда я пытаюсь изменить его обычным способом (например, с помощью простогоCefSharp 3 и SetZoomLevel
browser.ZoomLevel = (Convert.ToDouble(browser.Tag) - 100)/25.0;
я только получаю ошибку: IBrowser instance is null. Browser has likely not finished initializing or is in the process of disposing.
Но когда я могу установить адрес, почему не могу я установить ZoomLevel
Даже если я попробуйте поместить метод в FrameLoadEnd
и измените ZoomLevel там, я получаю сообщение об ошибке только в другом потоке. Не должно ли это событие запускаться в одном потоке? Я не могу получить доступ к отправителю события внутри события? странно ...
Есть ли у кого-то идея, как я могу изменить ZoomLevel программно? Я должен изменить его при загрузке сайта, а затем кнопкой.
О, и кстати. Я использую МОФ-версию CefSharp 3.
Вам нужно указать точную версию использования, например '49.0.0' или' 47.0.4'. Событие 'FrameLoadEnd' запускается в потоке' CEF', вам нужно отправить его в поток 'UI', чтобы получить доступ к свойству зависимости. Лучше назвать 'SetZoomLevel'. Помните, что «CefSharp» - это не волшебный черный ящик, источник там, просто убедитесь, что вы выбрали правильную ветку, соответствующую версии, используемой вами. – amaitland
Я использую 49.0.0.0 и um ... hm ... yeah ... с простой 'private void MyBrowserOnFrameLoadEnd (отправитель объекта, FrameLoadEndEventArgs frameLoadEndEventArgs) { ChromiumWebBrowser browser = (ChromiumWebBrowser) отправитель; Dispatcher.Invoke (() => { browser.ZoomLevel = (Convert.ToDouble (browser.Tag) - 100)/25.0; }); } 'отлично работает –
Если вам нужно установить уровень масштабирования раньше, вам, скорее всего, придется расширять' ChromiumWebBrowser' и переопределять 'OnIsBrowserInitializedChanged' https://github.com/cefsharp/CefSharp/blob/cefsharp/49/ CefSharp.Wpf/ChromiumWebBrowser.cs # L569 – amaitland