Xamarin Forms: привязка данных WebView - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь создать страницу, которая использует привязку данных для заполнения WebView, которая размещена на StackLayout.Вот XAML для этой страницы содержимого:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="GES.Views.DetailsPage"
             xmlns:di="clr-namespace:GES.DI;assembly=GES"
             xmlns:c="clr-namespace:GES.Views.Converters;assembly=GES"     
             di:ServiceLocator.AutoWireViewModel="true"
             Padding="15, 10, 15, 10"
             Title="Ensino Superior">
    <ContentPage.Resources>
        <ResourceDictionary>
            <c:HtmlSourceConverter x:Key="htmlConverter"/>
            <Style x:Key="title" TargetType="Label">
                <Setter Property="FontAttributes" Value="Bold" />
                <Setter Property="TextColor" Value="{StaticResource colorPrimary}" />
                <Setter Property="FontSize" Value="16" />
            </Style>
            <Style x:Key="dateText" TargetType="Label">
                <Setter Property="TextColor" Value="{StaticResource lightGray}" />
                <Setter Property="FontSize" Value="10"></Setter>
                <Setter Property="FontAttributes" Value="Bold"></Setter>
            </Style>
        </ResourceDictionary>
    </ContentPage.Resources>
    <ContentPage.Content>
        <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
            <ScrollView>
                <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                    <Label Text="{Binding Path=News.Title}" 
                           Margin="0, 10, 0, 10"
                           Style="{StaticResource title}"></Label>
                    <Label Text="{Binding Path=News.PublicationDate, StringFormat='{0:dd/MM/yyyy}'}" 
                           HorizontalTextAlignment="End"
                           Margin="0, 0, 10, 10"
                           Style="{StaticResource dateText}"></Label>
                    <WebView Margin="0, 10, 0, 10"
                             Source="{Binding Path=News.Contents, Converter={StaticResource htmlConverter}}">
                    </WebView>
                </StackLayout>
            </ScrollView>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

Поскольку свойство News.Contents возвращает фрагмент HTML, я создал специальный преобразователь для преобразования текста в HtmlWebViewSource:

public class HtmlSourceConverter: IValueConverter{
    public object Convert(object value,
                          Type targetType,
                          object parameter,
                          CultureInfo culture) {
        var html = new HtmlWebViewSource();
        if (value is string h &&
            !string.IsNullOrEmpty(h)) {
            html.Html = HttpUtility.HtmlDecode(h);
        }

        return html;
    }


    public object ConvertBack(object value,
                              Type targetType,
                              object parameter,
                              CultureInfo culture) =>
        throw new NotImplementedException();
}

Теперь проблема.Когда страница загружена, компонент WebView будет отображать только маленький белый прямоугольник ... Поворот устройства (например, переход от портрета к ландшафту или наоборот) показывает содержимое WebView.Например, предположим, что я использую устройство в портретном режиме.Загрузка страницы показывает следующее:

WebView loaded in portrait mode

Однако, если я поверну свое устройство, оно покажет содержимое:

WebView does show the text after rotating the device

Похоже, что WebView неправильно отображает при первой загрузке ... Кстати, если я загружу страницу в альбомной ориентации, мне придется перейти в портретный режим, чтобы увидетьчто-нибудь ...

Я пытался искать в Интернете и нашел старую ошибку , но похоже, что она исправлена ​​(я использую последнюю стабильную версию XamarinСборка форм)

Есть какие-нибудь подсказки о том, что происходит?

1 Ответ

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

Для всех, кто интересуется, я подписался на эту запись , чтобы создать собственный рендерер веб-просмотра ...

...