nam*_*nam 9 c# wpf xaml webview2
WebView2控件:如下所示,HTML 字符串通过事件内的NavigateToString(...)Button_Click(...)调用成功加载。但我需要在加载Window和/或其Grid加载后立即加载 HTML 字符串。MainWindow(){...}但是构造函数内或事件内的以下代码rootGrid_Loadded(...)会引发如下错误:
问题:我们怎样才能解决问题并在加载或HTML string后立即加载?或者有更好的解决方案/解决方法吗?WindowGrid
主窗口.xaml:
<Window x:Class="WpfWebView2TEST.MainWindow"
.....
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
mc:Ignorable="d"
Style="{StaticResource CustomWindowStyle}"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Button x:Name="btnTest" Content=Test" Click="btnTest_Click"/>
<wv2:WebView2 Name="MyWebView" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
注意:在以下构造函数中调用 MyLoadHTMLString() 或rootGrid_Loaded(...)事件会引发如下错误:
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyLoadHTMLString();
}
........
}
private void rootGrid_Loaded(object sender, RoutedEventArgs e)
{
MyLoadHTMLString();
}
public void MyLoadHTMLString()
{
string sHTML = "<!DOCTYPE html>" +
"<html lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\">" +
"<head>" +
"<meta charset=\"utf-8\" />" +
"<title>Test Title</title>" +
"</head>" +
"<body>" +
"<p>Test paragraph</p>" +
"</body>" +
"</html>";
MyWebView.NavigateToString(sHTML);
}
Run Code Online (Sandbox Code Playgroud)
注意:以下按钮单击事件successfully将 HTML 字符串加载到WebView2
private void btnTest_Click(object sender, RoutedEventArgs e)
{
MyLoadHTMLString();
}
Run Code Online (Sandbox Code Playgroud)
错误:
System.InvalidOperationException HResult=0x80131509 Message=尝试使用 WebView2 功能,该功能需要在初始化 CoreWebView2 之前使用其 CoreWebView2。首先调用 EnsureCoreWebView2Async 或设置 Source 属性。来源=Microsoft.Web.WebView2.Wpf
更新:
该MSDN 文档的第二段和第三段似乎为此类问题提供了一些解决方案。但我不知道如何实现它
Rez*_*aei 14
要将 html 加载到 中WebView2,您可以使用NavigateToString:
private async void Form1_Load(object sender, EventArgs e)
{
var html = @"
<html>
<head>
<title>Basic Web Page</title>
</head>
<body>
Hello World!
</body>
</html>";
await webView21.EnsureCoreWebView2Async();
webView21.NavigateToString(html);
}
Run Code Online (Sandbox Code Playgroud)
Pou*_*Bak 12
第一的:
你的问题的答案:
您必须先确保该Webview2控件处于可用状态initialized,然后才能使用它。您可以通过以下两种方式之一执行此操作,即调用:
await MyWebView.EnsureCoreWebView2Async();
Run Code Online (Sandbox Code Playgroud)
或者简单地设置Source属性。
下一篇: 这只是一个很好的建议。我从不使用“NavigateToString”,因为在 C# 字符串中包含 html 很快就会变得“混乱”。
相反,我创建一个子文件夹(称为“html”)。然后我在这个文件夹里有一个html文件,一个css文件和一个script文件。现在我可以直接编辑文件,并在设计时进行智能感知和错误检查。
请记住:单击“ ”中的文件Property Inspector,然后在属性窗口中选择“ Copy to output directory”。这里选择:“ Copy if newer”。现在文件将被复制到“Bin”文件夹中,以便WebView2可以找到它们。
现在,在您的代码中,您只需将 WebView2 的Source属性设置为 html 文件的路径,如下所示:
MyWebView.Source = new Uri(Path.Combine(Environment.CurrentDirectory, @"Html\MyWebView.html"));
Run Code Online (Sandbox Code Playgroud)
注意:这将自动初始化 WebView2 并导航到您的 html 文件。
现在,您可以在 html 文件中包含 css 和脚本文件,就像通常对网页所做的那样:
<html>
<head>
<meta charset="utf-8" />
<title>Whatever</title>
<link rel="stylesheet" href="MyWebView.css" type="text/css" />
<script type="text/javascript" src="MyWebView.js">
</script>
................
Run Code Online (Sandbox Code Playgroud)
恕我直言,这是使用本地 html 的更好方法 - 更容易维护。
| 归档时间: |
|
| 查看次数: |
23247 次 |
| 最近记录: |