浏览器尚未使用ChromiumWebBrowser WPF在tabitem中初始化

时间:2019-02-21 10:44:37

标签: c# wpf cefsharp

我在WPF中控制Cefsharp ChromiumWebBrowser有问题。项目包含UserControl和Tabitem,它们位于UserControl内部。程序运行时,我移至tabitem控件,我抛出了异常

  

在CefSharp.dll中发生了'System.Exception'类型的异常,但   未在用户代码中处理IBrowser实例为null。浏览器有   可能尚未完成初始化或正在处理中。

XAML

<UserControl x:Class="QuoteHubWPF.Controls.ChromeWebBrowser"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:QuoteHubWPF.Controls"
         xmlns:cefSharp="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
         xmlns:ge="clr-namespace:SourceChord.ResponsiveGrid;assembly=ResponsiveGrid.Wpf"

  mc:Ignorable="d"  ClipToBounds="True">


<cefSharp:ChromiumWebBrowser Name="chromiumWebBrowser" VerticalAlignment="Stretch"    VerticalContentAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"   RenderTransformOrigin="0.5,0.5"  Height="360" ClipToBounds="True" Loaded="ChromiumCKEditor_Loaded"  IsBrowserInitializedChanged="browser_IsBrowserInitializedChanged"   FrameLoadEnd="chromiumWebBrowser_FrameLoadEnd"/>

.cs

公共局部类ChromeWebBrowser:UserControl     {

    public ChromeWebBrowser()
    {

        InitializeComponent();
         chromiumWebBrowser.Address = "html";

    }      

    public string GetHTML()
    {


        var htmlFromPage = chromiumWebBrowser.EvaluateScriptAsync("getDataFromTheEditor", 10000);
  

这里存在异常

       var response = htmlFromPage.Result;
        var result = response.Success ? (response.Result ?? "null").ToString() : response.Message;

        return result;

    }
    private void browser_IsBrowserInitializedChanged(object sender, DependencyPropertyChangedEventArgs e)
    {

  some code to run script 


    }   
}

任何解决此问题的解决方案?运行Tabitem控件时会发生这种情况。

更新并说明问题 感谢您快速回答@amaitland。 GetHtml在其他视图模型中调用。那么,如何在没有错误的情况下再次进行初始化?

NewJobViewModel

public void GetHTMLFromView()
    {
        if (View != null)
        {
            var njView = View as NewJobUC;                            
          var contentJobDescription = njView.JobDescriptionCKEditor.GetHTML();

NewJobUC.xaml

<TabItem ...some code ... 
<local:ChromeWebBrowser  x:Name="JobScopeCKEditor" CKEContent="{Binding NewJob.JobScope}"   HorizontalAlignment="Stretch" Width="{Binding ElementName=canv, Path=ActualWidth}" />
</TabItem>

0 个答案:

没有答案