Работая над небольшим приложением UWP, которое отображает форматированный текст и обновляет его части в зависимости от изменений модели, я наткнулся на действительно странную ошибку RichTextBlock
.Я был бы признателен, если бы кто-то смог дать представление об этой RichTextBlock
особенности или дать идею по ее устранению.
Вот упрощенный код воспроизведения и пример использования ошибки:
RichTextBlock
с обновленным кодом контента работает нормально, пока пользователь не нажмет на него.После щелчка отображается еще одно изменение, но при втором изменении содержимое становится скрытым.
После этого, если пользователь выбирает что-то в невидимом тексте или нажимает Ctr + A, то RichTextBlock
будет повторно отображать его содержимое, но после 2-го изменения текста содержимое снова станет скрытым.
Что любопытно, при использовании кнопки «Ничего не делать» содержимое постоянно появляется,хотя нажатие на RichTextBlock
еще раз заставляет его исчезнуть снова.
<Page
x:Class="RichTextBlockTest.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Viewbox>
<StackPanel Spacing="8" Margin="4">
<RichTextBlock FontSize="24">
<Paragraph>
<Run x:Name="timeRun">{ Time is Now }</Run>
</Paragraph>
</RichTextBlock>
<Button HorizontalAlignment="Stretch">Do Nothing</Button>
</StackPanel>
</Viewbox>
</Page>
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace RichTextBlockTest
{
public sealed partial class MainPage : Page
{
private DispatcherTimer timer =
new DispatcherTimer { Interval = new TimeSpan(0, 0, 1) };
public MainPage()
{
InitializeComponent();
timer.Tick += (o, e) =>
{
timeRun.Text = DateTime.Now.ToString("HH:mm:ss");
};
timer.Start();
}
}
}
Помимо вышеизложенного, я пробовал этот сценарий с привязкой, DependencyProperty
, {x:Bind}
, а также с воссозданием Run
и Paragraph
там вместо прямого изменения Run.Text
из кода - все с тем же результатом.
- Проект ориентирован на Windows 10, версия 1803 (10.0; сборка 17134)
- Подтверждена эта ошибка на 2-х компьютерах под управлением Win 10 Pro 1803 - разработка и другой чистый тестовый компьютер.
- Обратите внимание, что Windows 10 Pro 1809 и сборка сервера1809не показывать эту ошибку (проект все еще был нацелен на 1803 при тестировании).Существуют некоторые странности того, как
RichTextBlock
отображает текст, когда пользователь выбирает его часть, в то время как текст изменяется, включая временное исчезновение, похожее на ошибку выше, но в 1809 году а) исчезновение не является постоянным и требует не просто щелчка, а выборав процессе, б) это серая область, как элемент управления должен вести себя, если выбранный пользователем текст был изменен приложением в середине полета, и в) есть простые и логичные обходные пути, например, приостановка автоматического изменения текстаесли пользователь пытается что-то выбрать.
Обновление 2018-12-11
- VS.Net был обновлен до 15.9.4, что также требовало проектов с переходом на 1803 (!)
Microsoft.NETCore.UniversalWindowsPlatform
версия с 6.2.2 до 6.1.9.Ошибка все еще воспроизводима в Windows 10 Pro 1803.