在控制台中添加表格 - Spectre 控制台系列
[[academy-video-youtube({"vid": "jpCAgY5nqwc", "start_time": "0", "title": "向你的游戏机添加桌子 - Spectre 游戏机系列", "creator": "Tim Corey", "length": "10m 24s"})]]
Spectre.Console 是一个功能强大的 .NET 库,可帮助您创建精美的控制台应用程序。 您可以构建结构化布局、使用颜色,甚至显示进度条或交互式提示,而不是纯文本输出。在他的 Spectre Console 系列中,Tim Corey 通过实用的小课程向开发人员展示了如何充分利用这个库。
在"为您的控制台添加表格--Spectre Console 系列"视频中,Tim 重点介绍了 Spectre.Console 表格。 表格是一项核心功能,可以通过对齐、填充、边框和样式来显示结构化数据。 我们将深入了解 Tim 的演练,以便您了解如何准确使用这一功能。
开始使用 Spectre.Console.
在开始部分(0:00),Tim 解释说 Spectre.Console 可以让您创建视觉效果好、信息量大的应用程序。 它以名为 Spectre.Console 的 NuGet 软件包的形式发布。 您可以使用以下工具轻松安装
// dotnet add package spectre console
dotnet add package Spectre.Console// dotnet add package spectre console
dotnet add package Spectre.Console安装该库后,在控制台应用程序中展示信息将变得更加容易。 Tim 还指出了视频中提供的文档和源代码链接,供有兴趣了解更多示例的人参考。
创建您的第一个表格
Tim 在 0:35 开始编码。他创建了一个 Table 对象:
var table = new Table();var table = new Table();然后,他使用 AddColumn 添加了三列:
table.AddColumn("First Name");
table.AddColumn("Last Name");
table.AddColumn("Age");table.AddColumn("First Name");
table.AddColumn("Last Name");
table.AddColumn("Age");这就形成了基本结构。 他解释说,以后每一列都可以有自己的宽度、对齐方式和样式。
接下来,他使用 AddRow 添加行。 Tim 在 1:06 说有三种支持添加行的方法:
1.IRenderable 对象的参数列表(用于嵌套项目,如面板、另一个表格甚至图表)。
2.由字符串组成的参数列表(最常见)。
3.IEnumerable<IRenderable>(不常用但可用)。
他首先演示了第二种方案,并补充道:
table.AddRow("Tim", "Corey", "46");
table.AddRow("Sue", "Storm", "23");table.AddRow("Tim", "Corey", "46");
table.AddRow("Sue", "Storm", "23");这样,表格中就有了两行数据。 在 3:26 分,Tim 提醒观众必须使用 AnsiConsole.Write(table)(而不是 WriteLine)才能在终端中显示类似表格的 IRenderable:
AnsiConsole.Write(table);AnsiConsole.Write(table);当他运行程序时,控制台会显示一个格式整齐的表格,表头和行自动对齐。 即使只有几行代码,Spectre 也能让控制台输出看起来更专业。

对齐和展开表格
4:00 时,Tim 演示了如何控制表格在屏幕上的位置。 例如:
table.Centered();table.Centered();这将在控制台窗口的中央显示整个表格。 他解释说,这种设置影响的是整个表格,而不是列。 您也可以将表格右对齐或左对齐。 默认值为左。

然后,他在 5:01 处演示了 table.Expand(),使表格填满整个终端窗口的宽度。 一旦展开,居中位置就不起作用了,因为表格现在占据了所有可用空间。 默认为折叠式表格。

添加边框和了解终端支持
接下来,Tim 在 5:21 处添加了一个边框:
table.Border(TableBorder.Rounded);table.Border(TableBorder.Rounded);他在 Visual Studio 的控制台中运行应用程序,发现边角不是圆的。 5:54 时,他切换到 Windows 终端并重新运行,现在出现了圆角。
Tim 解释说(5:59),渲染能力取决于您使用的终端。 底层 shell 只提供输出,但终端决定可以显示哪些样式。 Windows 终端支持圆角边框字符; Visual Studio 的集成控制台不提供这些功能。 这同样适用于颜色、标记或您可能添加的斜体、下划线或粗体文本样式。
他在 7:01 显示,即使是 Visual Studio 之外的开发人员命令提示符也能正确渲染,因为它使用的是不同的终端。 当您尝试使用 Spectre 功能(例如进度条、长时间运行的任务或表格)时,这是一个需要关注的重要点:并非所有终端都能显示所有样式。
添加行分隔符
Tim 还指出,为了清晰起见,可以在行与行之间显示分隔符:
table.ShowRowSeparators();table.ShowRowSeparators();这将在每一行之间画一条水平线,这样就可以在较大的表格中更方便地扫描信息--尤其是当您要构建显示大量输出或动态处理参数的 CLI 工具时。
列级样式:填充、宽度、对齐
Spectre.Console 表格的优势之一是您可以单独定制每一列。 8:02 时,Tim 修改了第一栏:
table.Columns[0].PadLeft(5).PadRight(5);table.Columns[0].PadLeft(5).PadRight(5);这就在文本两侧增加了衬垫。 然后,他在第二列设置了固定宽度:
table.Columns[1].Width(15);table.Columns[1].Width(15);最后,他对该栏目的内容进行了右对齐:
table.Columns[1].RightAligned();table.Columns[1].RightAligned();当他在 9:10 再次运行该程序时,你可以看到第一列被填充,第二列被设置为固定宽度,内容被右对齐。 即使是标题文本也要尊重这些设置。 Tim 指出(8:42),宽度的单位是字符,而不是像素。
填充、对齐和固定宽度这些细小的润色会使您的控制台应用程序更具可读性。 结合 Spectre 的颜色、标记和面板,您可以创建感觉更接近 GUI 但完全在控制台中运行的输出。


