如何在用户在WebView控件中进行交互后隐藏XAML控件

时间:2016-03-03 01:22:05

标签: c# xaml win-universal-app

我有一个应用程序使用javascript从WebView控件中调用另一个项目本机c#类方法(非常类似于this github项目)

我在OnNavigationStarting事件中使用AddWedAllowedObject方法。

如何从正在调用的本机c#类方法中隐藏/显示XAML控件?由于循环依赖,我无法在其他项目中引用Page类。

1 个答案:

答案 0 :(得分:0)

  

传递到 AddWebAllowedObject 的对象必须从与app程序集分开的Windows Runtime component导入。这是 AllowForWeb 属性必须由WebView安全子系统标识的属性。如果您使用应用项目中的类,则 AddWebAllowedObject 不起作用。

有关详细信息,请参阅WebView.AddWebAllowedObject

如您所知,由于循环依赖,我们无法在其他项目中引用Page类。

作为一种解决方法,我们可以从Html向页面发送一个字符串。并根据字符串隐藏/显示XAML控件。

  

当页面调用window.external.notify并传递字符串参数时,托管的HTML页面可以在Windows应用商店应用中触发ScriptNotify事件。

有关详细信息,请参阅WebView.ScriptNotify

例如:

<WebView Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScriptNotify="Web_ScriptNotify"
          NavigationStarting="OnNavigationStarting" x:Name="Web" Source="ms-appx-web:///WebPage.html" />
<Ellipse Name="MyEllipse" Fill="Red" Height="200" Width="200"></Ellipse>

在代码背后:

private void Web_ScriptNotify(object sender, NotifyEventArgs e)
{
    if (e.Value == "Collapsed")
    {
        MyEllipse.Visibility = Visibility.Collapsed;
    }
    else
    {
        MyEllipse.Visibility = Visibility.Visible;
    }
}

在WebPage.html中编辑功能:

function showToast() {
    window.external.notify('Collapsed');
}