在开发一个显示富文本并根据模型更改更新部分内容的小型 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();
}
}
}
除了上述之外,我还尝试了使用绑定 , 以及重新创建 and the 而不是直接从代码更改的场景DependencyProperty
-{x:Bind}
所有Run
这些Paragraph
都Run.Text
具有相同的结果。
- 该项目面向 Windows 10 版本 1803(10.0;内部版本 17134)
- 在运行 Win 10 Pro 1803 的 2 个盒子上确认了这个错误 - 开发和另一台干净的测试机器。
- 请注意,Windows 10 Pro 1809 和 Server build 1809 不会显示此错误(该项目在测试时仍以 1803 为目标)。当用户在修改文本时选择文本的一部分时如何显示文本存在一些怪癖
RichTextBlock
,包括类似于上述错误的临时消失,但在 1809 中 a) 消失不是永久性的,不仅需要单击,还需要进行选择, b) 这是一个灰色区域,如果用户选择的文本在运行中被应用程序修改,控件应该如何表现,并且 c) 那里有简单且合乎逻辑的解决方法,例如,如果用户尝试选择某些内容,则暂停自动文本更改。
2018-12-11 更新
- VS.Net 已更新到 15.9.4,它还需要将 1803 降级(!)
Microsoft.NETCore.UniversalWindowsPlatform
版本从 6.2.2 降到 6.1.9 的项目。该错误在 Windows 10 Pro 1803 中仍然可以重现。