UWP / C #: отображение кнопки «Назад», если в веб-представлении открывается определенный HTML-файл - PullRequest
0 голосов
/ 10 мая 2018

Я работаю над портированием из приложения Cordova для универсальной платформы Windows. В настоящее время я в основном создал контейнер, в котором отображаются локальные HTML-файлы (они также были перенесены из приложения Cordova). Теперь я хотел бы добавить кнопку возврата в верхнем левом углу окна, как и любое приложение UWP. Для этого я использую эту инструкцию:

SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;

Работает отлично, но я хочу, чтобы эта кнопка появлялась только тогда, когда определенный веб-файл HTML отображается в веб-просмотре. Это должна быть логика, подобная этой:

1) If certain_file.html is loaded
1.1) Show the back button
2) Else
2.1) Hide the back button

Я работаю с Visual Studio и Visual C #. У вас есть идеи о том, как я могу сделать это?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

@ Ксавье Се - MSFT Это MainPage.xaml

<Page
x:Class="Project_Onome.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Project_Onome"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

<Grid>
    <WebView x:Name="OnomeWebContainer"/>
    <WebView HorizontalAlignment="Center" VerticalAlignment="Center"/>
    <WebView Source="ms-appx-web:///www/index.html"/>
    <WebView DOMContentLoaded="OnomeWebContainer_DOMContentLoaded"/>
</Grid>

А это MainPage.xaml.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Core;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

namespace Project_Onome
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            WebView OnomeWebContainer = new WebView();
            OnomeWebContainer.DOMContentLoaded += OnomeWebContainer_DOMContentLoaded;
        }
    private void OnomeWebContainer_DOMContentLoaded(WebView sender, WebViewDOMContentLoadedEventArgs args)
    {
        if (args.Uri.LocalPath == "/security_auth.html")
        {
            SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
        }
        else
        {
            SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
        }
    }
}

}

0 голосов
/ 18 мая 2018

Обновлен код, теперь все работает отлично!

1) MainPage.xaml

<WebView Name="OnomeWebContainer" Source="ms-appx-web:///www/index.html" DOMContentLoaded="OnomeWebContainer_DOMContentLoaded"></WebView>

2) MainPage.xaml.cs

private void OnomeWebContainer_DOMContentLoaded(WebView sender, WebViewDOMContentLoadedEventArgs args)
    {
        if (args.Uri.LocalPath == "/www/security_auth.html")
        {
            SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
        }
        else
        {
            SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
        }
    }

Спасибо Ксавье Се за помощь! :)

0 голосов
/ 11 мая 2018

Вы можете использовать событие DOMContentLoaded веб-просмотра, чтобы решить, отображается ли кнопка возврата.

Например:

<WebView DOMContentLoaded="WebView_DOMContentLoaded" Source="ms-appx-web:///HTMLPage1.html"></WebView>
private void WebView_DOMContentLoaded(WebView sender, WebViewDOMContentLoadedEventArgs args)
{
    if (args.Uri.LocalPath == "/HTMLPage1.html")
    {
            SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
    }
    else
    {
            SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
    }
}

enter image description here

enter image description here

...