Xamarin.forms - Afficher du contenu avec WebView

c# html-agility-pack webview xamarin.forms

Question

Je crée une application mobile d'un site Web existant. J'utilise HTMLAGILITYPACK pour supprimer des données d'un site Web. Je veux les afficher dans mon application. Mais il n'y a pas de résultat et rien ne s'affiche.

Ceci est mon code App avec "grattoir":

namespace Apka
{
public partial class App : Application
{
    public static string DocumentPath = 
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    public static string strona = "";


    public static NavigationPage NavigationPage { get; private set; }
    WebRequest request = HttpWebRequest.Create("www.wiocha.pl");
    WebResponse response;

    public App()
    {


        InitializeComponent();

        starthttp();





        NavigationPage = new NavigationPage(new MainPage());
        RootPage rootPage = new RootPage();
        MenuPage menuPage = new MenuPage(rootPage.vm);

        rootPage.Master = menuPage;
        rootPage.Detail = NavigationPage;
        MainPage = rootPage;

    }


    private async void starthttp()
    {

        response = await Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null);

        var html = new HtmlDocument();
        html.Load(response.GetResponseStream());
        var nodes = html.DocumentNode.Descendants("img")
            .Where(node => node.GetAttributeValue("class", "")
               .Equals("imageitself")).ToList();





        foreach (var node in nodes)
        {

            strona = strona + node.OuterHtml;

        }

        System.Diagnostics.Debug.WriteLine(strona);




    }
}

} Dans la console, il retourne des images img au format HTML, comme img

Voici ma page où je tente de placer des images éraflées:

namespace Apka.View.Pages
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class MainPage : ContentPage
    {



        public MainPage()
        {
            InitializeComponent();

            WebView webView = new WebView
            {
                Source = new HtmlWebViewSource
                {
                    Html = @"<!DOCTYPE html><html><head><style>img { width:100%; }</style></head><body>" + App.strona + @"</body></html>",
                },
                VerticalOptions = LayoutOptions.FillAndExpand

            };



            /* ViewModel.Pages.MainPageViewModel vm = new ViewModel.Pages.MainPageViewModel();
             this.BindingContext = vm;*/
        }





    }
}

Et le code XAML sur cette page ressemble à ça:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="" (cant place links)
         xmlns:x="" (here too)
         x:Class="Apka.View.Pages.MainPage">


<ContentPage.ToolbarItems>
    <ToolbarItem Command="{Binding MenuItem1Command}" />
</ContentPage.ToolbarItems>
<ContentPage.Content>

    <StackLayout BackgroundColor="#505050" VerticalOptions="FillAndExpand" 
HorizontalOptions="FillAndExpand">



    </StackLayout>

</ContentPage.Content>
</ContentPage>

Pourquoi webview ne fonctionne pas? Que dois-je faire pour afficher ces images?

Réponse acceptée

Vous créez votre WebView avec le code suivant

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        WebView webView = new WebView
        {
            // elided
        };


        /* ViewModel.Pages.MainPageViewModel vm = new ViewModel.Pages.MainPageViewModel();
         this.BindingContext = vm;*/
    }

Quoi qu’il en soit, il n’ya pas d’endroit où vous ajoutez la WebView à votre page. Si vous voulez vraiment créer la WebView partir de code, vous devrez donner un nom à StackLayout

<StackLayout x:Name="StackLayout" ...>

puis ajoutez la vue WebView partir de votre constructeur MainPage .

StackLayout.Children.Add(webView);

Quoi qu’il en soit, rien ne vous empêche de créer WebView partir de XAML

<StackLayout BackgroundColor="#505050" 
             VerticalOptions="FillAndExpand"  
             HorizontalOptions="FillAndExpand">
    <WebView x:Name="WebView" VerticalOptions="FillAndExpand />
</StackLayout>

puis définissez simplement la source dans le code derrière

public MainPage()
{
    InitializeComponent();

    WebView.Source = new HtmlWebViewSource
                     {
                         Html = @"<!DOCTYPE html><html><head><style>img { width:100%; }</style></head><body>" + App.strona + @"</body></html>",
                     };
}

Réponse populaire

Sur la page où déclarer la vue Web, quand est ajouté à une pile de couches, vous devez spécifier les options WidthRequest et HeightRequest de la vue Web pour l'affichage.

namespace Apka.View.Pages
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MainPage : ContentPage
{



    public MainPage()
    {
        InitializeComponent();

        WebView webView = new WebView
        {
            Source = new HtmlWebViewSource
            {
                Html = @"<!DOCTYPE html><html><head><style>img { width:100%; }</style></head><body>" + App.strona + @"</body></html>",
            },
            VerticalOptions = LayoutOptions.FillAndExpand,
            WidthRequest = 1000,
            HeightRequest=1000

        };



        /* ViewModel.Pages.MainPageViewModel vm = new ViewModel.Pages.MainPageViewModel();
         this.BindingContext = vm;*/
    }
}
}



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi