[英]Set WebView2 data folder in WPF/MVVM/Caliburn setup
我們有使用 Caliburn/MVVM 設置的 WPF 應用程序。
Bootstrapper
中的ViewModel
注冊:
builder.RegisterType<CustomWebViewModel>().As<Screen>();
在CustomWebView.xaml
中創建WebView2
:
<Grid>
<wv2:WebView2 x:Name="WebView2" Source="{Binding WebAddress, Mode=OneWay,
UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}" />
</Grid>
在開發環境應用程序運行順利: WebView2
顯示正確的內容。
但是在生產中,此應用程序安裝在C:\Program Files\Company\Product\
文件夾中。
啟動時會拋出消息:
Microsoft Edge 無法讀取和寫入其數據目錄:C:\Program Files\Company\Product\Product.exe.WebView2\EBWebView
原因是 WebView2 需要配置為使用應用程序有權使用的數據文件夾。
這段代碼做到了:
var appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var userDataFolder = System.IO.Path.Combine(appData, "CustomWebView2");
var task = await CoreWebView2Environment.CreateAsync(null, userDataFolder);
var webView2 = (WebView2)this.FindName("WebView2");
if (webView2 != null)
await webView2.EnsureCoreWebView2Async(task);
問題:在這個設置中我在哪里調用這段代碼?
我嘗試OnCoreWebView2InitializationCompleted
和OnContentLoading
但在這兩種情況下EnsureCoreWebView2Async
拋出:
System.ArgumentException: ' WebView2 已經用不同的 CoreWebView2Environment 進行了初始化。 檢查 Source 屬性是否已設置,或者 EnsureCoreWebView2Async 之前是否使用不同的值調用過。
在設置WebView2
控件的Source
之前調用EnsureCoreWebView2Async
。
因此,從 XAML 標記中刪除綁定:
<wv2:WebView2 x:Name="WebView2" />
...並以編程方式設置它:
var appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var userDataFolder = System.IO.Path.Combine(appData, "CustomWebView2");
var task = await CoreWebView2Environment.CreateAsync(null, userDataFolder);
var webView2 = (WebView2)this.FindName("WebView2");
if (webView2 != null)
{
await webView2.EnsureCoreWebView2Async(task);
webView2.SetBinding(WebView2.SourceProperty, new Binding("WebAddress"));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.