我正在编写一个Windows 10 UWP应用程序,我在其中打开纯文本文件并在文本框中显示所述文件的内容。但我有一些奇怪的问题显示一些文件。打开一些文件后,文本框的方向从通常的“从左到右”变为“从右到左”,即使在XAML代码中它被指定为“从左到右”。
只有当我使用这段代码打开文件时才会发生这种情况(只有当我将enconding设置为UTF8时,如果我将其设置为ANSI,文本框将显示具有相应方向的文本,但我正在尝试的文件打开不是ANSI):
IBuffer buffer = await FileIO.ReadBufferAsync(file);
DataReader reader = DataReader.FromBuffer(buffer);
byte[] fileContent = new byte[reader.UnconsumedBufferLength];
reader.ReadBytes(fileContent);
string fileText = Encoding.UTF8.GetString(fileContent, 0, fileContent.Length);
如果我使用其他代码,它将正确显示,但在打开其他一些文本文件时崩溃:
string fileText = await FileIO.ReadTextAsync(file);
以下是一些截图:
我对此非常感到困惑,非常感谢任何帮助。
编辑:这是文本框的XAML代码:
<TextBox x:Name="MainTextBox"
TextWrapping="Wrap"
AcceptsReturn="True"
Grid.Row="2"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
FlowDirection="LeftToRight"
TextChanged="MainTextBox_TextChanged"
PointerEntered="MainTextBox_PointerEntered"
PointerExited="MainTextBox_PointerExited"/>
答案 0 :(得分:0)
我找到了解决方法,并意识到我没有在我的文本框XAML代码中使用正确的属性。
而不是使用
FlowDirection="LeftToRight"
我用过:
TextAlignment="Left"
现在,只要感到满意,它就会停止将文本对齐。
编辑:
实际上上面没有解决所有问题,所以我不得不从我想要加载的文件中删除BOM(UTF-8文件的前三个字节),因为出于某种原因,这就是什么导致文本在文本框中显示为已恢复。
具有讽刺意味的是,微软是唯一一个制作他们程序的开发者/公司(例如Notepad,Visual Studio),他们在他们保存的UTF-8文件中添加了一个BOM,在他们的“明星”平台中加入了一个错误的文本框(UWP)使用UTF-8 BOM无法正常工作。