我有一个非常简单的WPF应用程序,它只有一个RichTextBox和一个声明如下的按钮:
<Window x:Class="TestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SimpleChessWPF"
mc:Ignorable="d"
Title="MainWindow" Height="670.8" Width="741.8">
<Grid>
<RichTextBox HorizontalAlignment="Left" Height="534" Margin="10,97,0,0" VerticalAlignment="Top" Width="715" Name="TestRtb">
<RichTextBox.Resources>
<Style TargetType="{x:Type Paragraph}">
<Setter Property="Margin" Value="0"/>
</Style>
</RichTextBox.Resources>
</RichTextBox>
<Button Content="Button" HorizontalAlignment="Left" Margin="105,31,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>
</Window>
然后我尝试制作一个事件,在按下按钮时打印出一些测试文本:
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e) {
TestRtb.Document.Blocks.Clear();
for(int i = 0; i < 64; ++i) {
TestRtb.AppendText("i: " + i.ToString() + "\n");
printBits(i);
printBits(toBitSquare(i));
TestRtb.AppendText("\n");
}
}
private void printBits(int i) {
string text = i.ToBitArrayString();
TestRtb.AppendText(text + "\n");
}
public static int toBitSquare(int square) {
return ((square & ~7) >> 1) | (square & 7);
}
}
'ToBitArrayString()'是我自己的int
扩展名。它基本上用于打印其位数组表示。这就是我运行程序并按下按钮时发生的情况:
一切都按预期工作,但第一行“\ n”未打印。发生了什么事?
如果你想要复制,我的扩展功能如下:
private static string toBitArrayString(BitArray b, int spacePerByte = 1, int spacePerNibble = 0) {
StringBuilder sb = new StringBuilder();
for (int j = b.Length - 1; j >= 0; --j) {
int i = b.Length - 1 - j;
if (i % 4 == 0 && i > 0 && spacePerNibble > 0)
sb.Append(string.Concat(Enumerable.Repeat(" ", spacePerNibble)));
if (i % 8 == 0 && i > 0 && spacePerByte > 0)
sb.Append(string.Concat(Enumerable.Repeat(" ", spacePerByte)));
sb.Append(b[j] ? 1 : 0);
}
return sb.ToString();
}
public static string ToBitArrayString(this int input, int spacePerByte = 1, int spacePerNibble = 0) {
BitArray b = new BitArray(new int[] { input });
return toBitArrayString(b, spacePerByte, spacePerNibble);
}
答案 0 :(得分:3)
.NET Framework 3.5 SP1附带的富文本框包含错误。 转换包含换行符(\ r)的纯文本时,不要混淆新段落(\ n)。 使用此工作: - TestRtb.AppendText(“i:”+ i.ToString()+“\ r”);