文章目录
- 需求分析
 - C#代码UI设计
 
txt阅读器系列:
- 需求分析和文件读写
 - 目录提取类💎列表控件与目录
 - 字体控件绑定💎前景/背景颜色
 - 书籍管理系统💎用树形图管理书籍
 - 语音播放💎播放进度显示💎快进快退💎语速音量
 - 快捷键翻页
 
需求分析
网络上的TXT文件,质量良莠不齐,有一些从PDF等格式转化而来,或者干脆通过OCR扫描得到的文本文档,在排版上也有着硬伤。所以,作为一个txt阅读器,具备简单的文本清洗功能是竞争力的体现。
接下来拟实现如下功能
 
清理空格的目的是将行首和行尾的空格去除;段落拼接主要解决PDF转txt后,在中间断行的问题;去除空行主要是把多于一行的空行转为一行空行。
文本替换无需多言,编码更改则是考虑到因为编码不同可能导致乱码的情况,这里提供两个功能,一种是换一种编码重新打开,另一种是将文本文件另存为其他编码格式。
UI代码
其xaml代码为
<Expander DockPanel.Dock="Top" Header="文本清洗">
    <StackPanel>
        <DockPanel LastChildFill="True">
            <Button Content="执行" Width="50" DockPanel.Dock="Right"/>
            <UniformGrid Columns="3">
                <CheckBox Content="清理空格" Margin="5"/>
                <CheckBox Content="段落拼接" Margin="5"/>
                <CheckBox Content="去除空行" Margin="5"/>
            </UniformGrid>
        </DockPanel>
        <DockPanel LastChildFill="True">
            <TextBlock Text="文本替换" Width="50" DockPanel.Dock="Left"/>
            <CheckBox Content="正则表达式" Margin="5" DockPanel.Dock="Right"/>
            <TextBox Height="20"/>
        </DockPanel>
        <DockPanel LastChildFill="True">
            <TextBlock Text="➠➠➠➠" Width="50"/>
            <Button Content="替换" Width="50" DockPanel.Dock="Right"/>
            <TextBox Height="20"/>
        </DockPanel>
        <DockPanel LastChildFill="True">
            <TextBlock Text="编码更改" Width="47"/>
            <Button Content="另存" Width="50" DockPanel.Dock="Right"/>
            <Button Content="重载" Width="50" DockPanel.Dock="Right"/>
           <ComboBox/>
        </DockPanel>
    </StackPanel>
</Expander>
 
C#代码UI设计
清理空格、段落拼接还有去处空行是三个单选框,本着压缩代码的原则,这三个CheckBox可以写在一起,由C#的初始化代码统一给出。
首先,将这这些布局代码改为
<DockPanel LastChildFill="True">
    <Button Content="执行" Width="50" DockPanel.Dock="Right"/>
    <UniformGrid Columns="3" x:Name="ufgCheckBoxes"/>
</DockPanel>
 
然后在C#中新建全局变量
static readonly string[] FMT_METHOD = new string[] { "清理空格", "段落拼接", "去除空行" };
CheckBox[] fmtCheckBoxes = FMT_METHOD.Select(
    s => new CheckBox(){ Content = s, Margin = new Thickness(5) }).ToArray();
 
其中,FMT_METHOD是一个字符串数组,无需多言;fmtCheckBoxes是用数组生成的一个CheckBox数组。
接下来在窗口的构造函数MainWindow中添加下面的代码,表示将fmtCheckBoxes中所有CheckBox添加到ufgCheckBoxes,从而在布局上达到和此前一样的效果。
foreach (var ch in fmtCheckBoxes)
    ufgCheckBoxes.Children.Add(ch);
                


















