相关疑难解决方法(0)

18
推荐指数
3
解决办法
1万
查看次数

WebView2 控件未加载 HTML 字符串

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() …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml webview2

9
推荐指数
2
解决办法
2万
查看次数

在WPF中禁用WebBrowser上的上下文菜单

我有一个WPF应用程序,它将在带有触摸屏的PC上的自助服务终端上运行.应用程序以全屏模式运行,以隐藏操作系统.在我的一个页面上,我有一个WebBrowser控件,允许用户查看一些网页(导航仅限于某些页面).由于计算机将被放置在公共场所,我不能让用户访问操作系统.问题是,触摸屏允许右键单击Web浏览器,最终导致任务栏出现......不好......!

我一直试图在过去几天禁用该上下文菜单而没有太大成功.基本上我现在在的地方是:

  • 添加了对SHDocVw.dll的COM引用以获取IWebBrowser2接口(需要禁用启动新窗口.

    [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    [Guid("6d5140c1-7436-11ce-8034-00aa006009fa")]
    internal interface IServiceProvider
    {
        [return: MarshalAs(UnmanagedType.IUnknown)]
        object QueryService(ref Guid guidService, ref Guid riid);
    }
    static readonly Guid SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
    
    Run Code Online (Sandbox Code Playgroud)
  • 获取IWEbBrowser2接口

                IServiceProvider _serviceProvider = null;
    
                if (_browser.Document != null)
                {
                    _serviceProvider = (IServiceProvider)_browser.Document;
    
                    Guid _serviceGuid = SID_SWebBrowserApp;
                    Guid _iid = typeof(SHDocVw.IWebBrowser2).GUID;
    
                    SHDocVw.IWebBrowser2 _webBrowser = (SHDocVw.IWebBrowser2)_serviceProvider.QueryService(ref _serviceGuid, ref _iid);
    
    Run Code Online (Sandbox Code Playgroud)
  • 并尝试禁用文档上的oncontextmenu.

                    HTMLDocument doc = _webBrowser.Document as HTMLDocument;
                    mshtml.HTMLDocumentEvents2_Event ev = doc as mshtml.HTMLDocumentEvents2_Event;
    
                    ev.oncontextmenu += (arg) => { return false; };
    
    Run Code Online (Sandbox Code Playgroud)

到目前为止,没有成功......任何想法?

提前致谢.

.net c# wpf com-interop

6
推荐指数
2
解决办法
9927
查看次数

如何覆盖右键单击 WebView2 控件时出现的 ContextMenu?

如何覆盖右键单击 WebView2 控件时出现的 ContextMenu?

当您右键单击 WebView2 控件时,会出现带有“刷新”、“另存为”等选项的标准上下文菜单。

如何让我自己的 ContextMenuStrip 出现而不是在鼠标右键单击期间出现?

.net webbrowser-control webview webview2

4
推荐指数
2
解决办法
2489
查看次数

标签 统计

c# ×3

wpf ×3

.net ×2

webbrowser-control ×2

webview2 ×2

com-interop ×1

webview ×1

xaml ×1