代码自动生成文本小工具TextStringizerWpf

TextStringizerWpf

一个基于 .NET 8 的 WPF 文本处理工具,用于将输入文本逐行包裹前后缀并按需转义常见字符,支持插值字符串模式、多配置可选项、预设与历史记录、UI 自适应布局和多屏多 DPI 启动居中。

功能特点

  • 前后缀包裹:为每一行添加自定义的前缀与后缀。
  • 字符转义:可选转义反斜杠 \、双引号 "、大括号 {}(插值字符串时自动强制转义)。
  • 插值字符串:默认按 C# 插值字符串处理($"...")。
  • 选项配置:
    • 使用插值字符串
    • 转义双引号
    • 转义反斜杠
    • 转义大括号
    • 跳过空行
    • 去除每行首尾空白
    • 实时更新
  • 预设与历史:
    • 插值预设、普通预设一键切换
    • 前缀/后缀采用可编辑 ComboBox,支持历史记录,确认保存、取消恢复
    • 历史自动去重,保留最近 20 条
  • 多屏多 DPI:启动时可按配置多屏多 DPI 居中。
  • 布局优化:
    • 左侧"前缀:/后缀:"两行紧凑布局
    • 中列选项两列栅格整齐对齐,下方三项(跳过空行/去除空白/实时更新)一行
    • 右侧按钮固定 4 列,最后一行(确认/取消)右对齐
  • 发布形态:依赖框架的单文件可执行(需要本机安装 .NET 8 运行时)。

目录结构(关键)

  • TextStringizerWpf/
    • MainWindow.xamlMainWindow.xaml.cs:UI 与交互逻辑
    • Services/TextProcessor.cs:核心文本处理
    • Models/TextProcessOptions.cs:处理选项
    • Models/UserSettings.csServices/SettingsService.cs:前后缀历史与持久化
    • App.xamlApp.xaml.cs:应用入口、托盘图标
    • App.config:应用配置(含 CenterOnStartup
  • publish/:发布输出目录(单文件 EXE)

使用说明

  1. 启动 publish/TextStringizerWpf.exe
  2. 在左侧输入框粘贴或输入待处理文本。
  3. 顶部左侧设置"前缀:""后缀:"(可编辑下拉,有历史记录)。
  4. 中间列勾选需要的选项:
    • 使用插值字符串(默认勾选)
    • 转义双引号、转义反斜杠、转义大括号
    • 跳过空行、去除每行首尾空白、实时更新
  5. 右上角常用按钮:
    • 插值预设/普通预设:一键切换前后缀与相关选项
    • 处理:手动触发处理
    • 复制输出:复制到剪贴板
    • 导入/导出:读写文本文件
    • 清空输入/清空输出:快速清理
    • 确认/取消:保存/恢复前后缀
  6. 输出结果位于右侧"输出"框。

前后缀历史与确认/取消

  • 编辑完成后,点击"确认"将当前前缀/后缀保存到历史(自动去重、置顶),并作为下次启动的默认值。
  • 点击"取消"会恢复到上次保存的前后缀(不保存当前编辑)。
  • 历史保存位置:%AppData%/TextStringizerWpf/settings.json

多屏多 DPI 居中

  • App.config 中通过 appSettings 设置:

    xml 复制代码
    <add key="CenterOnStartup" value="true" />
  • 启动后窗口会在当前显示器工作区基于 DPI 缩放精确居中。

启动居中与多屏/多 DPI 说明

  • 无需在界面中设置开关,是否居中由配置 CenterOnStartup 控制,默认支持多屏与每屏不同 DPI 情况。
  • 程序启动时会:
    1. 通过 MonitorFromWindow/GetMonitorInfo 获取当前窗口所在显示器及其工作区(物理像素)。
    2. 通过 GetDpiForWindow 获取该窗口的实际 DPI,计算缩放因子(scale = DPI/96)。
    3. 将工作区从物理像素转换为 WPF 的 DIP(device independent pixels)。
    4. 在 DIP 坐标下计算 Left/Top/Width/Height,使窗口在当前显示器工作区内精准居中。
  • 为避免多 DPI 下出现放大/偏移问题,窗口 Width/Height 不做硬编码,尽量根据实际可视工作区和内容进行计算与限制。

注意:如果你需要强制固定初始宽高(不建议在多 DPI 下),请在 MainWindow.xaml 中谨慎设置,并确保与 DPI 换算逻辑相容,否则可能出现居中失准或控件拥挤。

故障排查(居中相关)

  • 窗口未居中:确认 App.configCenterOnStartup=true 是否生效,或者是否被外部窗口管理器调整。
  • 副屏偏移:检查副屏缩放比例(显示设置-缩放与布局),窗口会按该屏幕 GetDpiForWindow 的 DPI 计算居中。

注意事项

  • 运行环境:需要安装 .NET 8 Desktop Runtime(非自包含发布)。
  • 插值字符串模式下,大括号在 C# 字符串插值中用于表达式,工具会自动强制转义为 {``{}}
  • 字符转义顺序:反斜杠 → 双引号 → 大括号(当需要时),以减少二次转义干扰。
  • 托盘图标:程序运行时系统托盘会常驻图标,右键可快速操作(如显示/置顶、退出)。
  • 图标与布局:
    • 应用图标统一(标题栏/任务栏/托盘/可执行文件)
    • 右侧按钮固定四列,最后一行两按钮右对齐;在极小窗口时可能出现挤压,请适当放大窗口

发布与更新

  • TextStringizerWpf 项目目录执行:

    powershell 复制代码
    dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true -p:SelfContained=false -o ..\publish
  • 发布结果位于根目录 publish/ 下,直接运行 TextStringizerWpf.exe

常见问题 FAQ

  • 无法启动或显示异常?
    • 确保已安装 .NET 8 Desktop Runtime。
    • 如果从极老旧系统升级而来,建议以管理员身份首次运行。
  • 剪贴板操作失败?
    • 某些安全策略或第三方软件可能拦截,尝试以管理员身份运行或关闭相关限制。
  • 托盘图标未显示?
    • 个别系统托盘区可能被设置为隐藏,请在系统"任务栏设置"中显示此应用图标。

许可

本项目以私有用途为主,若需软件请联系作者,若需开源或分发请联系项目作者或维护者协调授权事宜。

相关推荐
葛小白12 小时前
Winform控件:Chart
c#·winform·chart
好望角雾眠12 小时前
第四阶段C#通讯开发-9:网络协议Modbus下的TCP与UDP
网络·笔记·网络协议·tcp/ip·c#·modbus
我是苏苏13 小时前
C#基础:如何从现有类库复制一个新的类库,并且加入解决方案
开发语言·c#
Jackson@ML18 小时前
用Visual Studio Code最新版开发C#应用程序
ide·vscode·c#
她说彩礼65万19 小时前
C# 代理模式
开发语言·c#·代理模式
张人玉1 天前
TCP 的三次握手和四次挥手
网络·tcp/ip·c#
曹牧1 天前
C#:三元运算符
开发语言·c#
m0_748248021 天前
C++与C#布尔类型深度解析:从语言设计到跨平台互操作
c++·stm32·c#
LeonDL1681 天前
【通用视觉框架】基于C#+VisionPro开发的视觉框架软件,全套源码,开箱即用
人工智能·c#·visionpro·通用视觉框架·机器视觉框架·视觉框架软件·机器视觉软件