Я пытаюсь создать страницу, которая использует привязку данных для заполнения 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 неправильно отображает при первой загрузке ... Кстати, если я загружу страницу в альбомной ориентации, мне придется перейти в портретный режим, чтобы увидетьчто-нибудь ...
Я пытался искать в Интернете и нашел старую ошибку , но похоже, что она исправлена (я использую последнюю стабильную версию XamarinСборка форм)
Есть какие-нибудь подсказки о том, что происходит?