在处理小型UWP应用程序时,该应用程序显示富文本并根据模型更改来更新其中的某些部分,但我偶然发现了一个非常奇怪的RichTextBlock
错误。如果有人可以提供有关RichTextBlock
特殊性的见解或提出解决此问题的想法,我将不胜感激。
以下是简化的复制代码和错误的用例:
RichTextBlock
可以正常工作,直到用户单击它为止。单击后,它会显示另一个更改,但在第二个更改中,内容将隐藏。
此后,如果用户在现在不可见的文本中选择某些内容或按Ctr + A,则RichTextBlock
将重新显示其内容,但是在第二个文本更改之后,该内容再次被隐藏。
奇怪的是,尽管再次单击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
-都具有相同的结果。
RichTextBlock
会显示一些文本,其中包括与上述错误类似的暂时消失,但是在1809年a)消失不是永久的,不仅需要单击,还需要一些怪癖。一个正在进行的选择,b)在灰色区域,如果用户选择的文本在应用程序运行过程中被修改,控件应该的行为如何,以及c)那里有简单而合理的解决方法,例如如果用户尝试选择某些内容,则暂停自动文本更改。Microsoft.NETCore.UniversalWindowsPlatform
版本从6.2.2降到6.1.9的项目。该错误在Windows 10 Pro 1803中仍然可以重现。