Xamarin.forms - отображение содержимого с помощью WebView

c# html-agility-pack webview xamarin.forms

Вопрос

Я создаю мобильное приложение существующего веб-сайта. Я использую HTMLAGILITYPACK для удаления некоторых данных с веб-сайта. Я хочу показать их в своем приложении. Но результата нет, и ничего не видно.

Это мой код приложения с «скребком»:

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);




    }
}

} В консоли он возвращает некоторый img в html, например img src = "link" class = "imageitself" alt = "blablabla"

Вот моя страница, где я пытаюсь поместить снимки:

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;*/
        }





    }
}

И код XAML на эту страницу выглядит так:

<?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>

Почему веб-просмотр не работает? Что делать, чтобы отображать эти фотографии?

Принятый ответ

Вы создаете свой WebView со следующим кодом

[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;*/
    }

Во всяком случае, нет места, где вы добавляете WebView на свою страницу. Если вы действительно хотите создать WebView из кода, вам нужно будет StackLayout имя в StackLayout

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

а затем добавьте WebView из конструктора MainPage .

StackLayout.Children.Add(webView);

Во всяком случае, нет ничего, что WebView вам создать его WebView из XAML

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

а затем просто установите источник в коде позади

public MainPage()
{
    InitializeComponent();

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

Популярные ответы

На странице, где объявление WebView, когда добавлено в stacklayout, необходимо указать WidthRequest и HeightRequest для WebView для отображения, не возникает, когда добавляется в GridLayout, для этого случая

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;*/
    }
}
}


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow