内容面板和呼出 - Spectre 控制台系列
Spectre.Console 是一个 NuGet 软件包,可帮助 .NET 开发人员创建视觉效果丰富的控制台应用程序。 在他的 Spectre 控制台系列中,Tim Corey 展示了如何使用交互式提示、表格、进度显示等功能,将普通的控制台窗口转变得更加专业。
在本文中,我们将通过 Tim Corey 的视频"Content Panels and Callouts - Spectre Console Series" 深入了解 Spectre Console 面板功能。通过 Tim 的示例,我们将了解如何在控制台的可用空间内创建面板、探索其功能并以不同风格显示数据。
创建基本的 Spectre 控制台面板
Tim 在视频的开头(0:00)提醒我们,Spectre.Console 可以让您将 C# 控制台应用程序转化为视觉效果好、信息量大的应用程序。 在本课(0:15)中,我们将创建面板,根据您的需要,面板可以作为简单的标注,甚至是小型表格。
0:34 时,Tim 在 Visual Studio 中编写了一个示例。 他展示了如何创建面板的新实例:
var panel = new("Tim Corey");
AnsiConsole.Write(panel);var panel = new("Tim Corey");
AnsiConsole.Write(panel);他指出(0:47),AnsiConsole.Write() 接受一个可呈现对象--因为 Panel 实现了 IRenderable,所以它正好适合。 运行 1:02 处的代码,会在文本 "Tim Corey "周围显示一个简单的方框。即使是这一小块空间,也可以用来调出注释、突出显示提示或将用户输入与其他控制台输出分隔开来。

探索面板功能:边框和填充
然后,Tim 继续演示面板功能。 在 1:22 处,他调整了边框样式:
panel.Border = BoxBorder.Rounded;panel.Border = BoxBorder.Rounded;为此,我们采用了圆角边框--这是可供选择的不同风格之一。 他指出,您还可以选择双边框或其他选项来匹配您自定义的彩色编码主题或蓝色和绿色口音。
1:42 时,Tim 调整了面板内的填充:
panel.Padding = new(2, 0);panel.Padding = new(2, 0);他解释说(2:16),控制台中的填充不像网页上的像素,它是基于字符宽度和回行。 像 5 这样的大数字会创建一个大面板,占去很多可用区域。 他数了数空格,演示了 padding 的工作原理(2:35)。
这种对内容周围空间进行微调的能力使您能够设计出与您的布局相匹配的面板,无论是显示变量表、条形图还是任何其他数据。
添加标题和自定义样式
3:37 时,Tim 为面板添加了一个标题:
panel.Header("My Name");panel.Header("My Name");当他运行 3:51 处的代码时,标题出现在边框中。 但这与内容相悖。 他通过改变衬垫解决了这个问题(4:04):
panel.Padding = new (1, 0);panel.Padding = new (1, 0);这就在标题和正文之间留出了一点空间。 Tim 指出(4:16),使用标题和间距可以清楚地标注面板,这在显示任务进度、实时显示,甚至是显示进度条的长期运行任务时非常有用。
在面板内显示列表
然后,Tim 演示了如何将字符串列表放入面板中。 4:26 时,他引入了上一课中的名称列表,并演示了如何将其连接成一个字符串:
string panelInfo = string.Join('\n', names);
var panel = new Panel(panelInfo)
.Header("Default Names");string panelInfo = string.Join('\n', names);
var panel = new Panel(panelInfo)
.Header("Default Names");这将列表折叠成一个带换行符的字符串(5:02)。 运行它(5:28)将列表整齐地显示在面板内,每个项目都独立成行。这种技术可让您以强类型的方式呈现数据或对象属性,但以文本形式呈现。

Tim 还强调(5:44),您可以使用富文本标记为特定项目添加自定义颜色。 例如:
"[red]Bilbo Baggins[/]""[red]Bilbo Baggins[/]"这展示了 Spectre 控制台面板不仅可以处理普通字符串,还可以处理样式内容,启用主题、粗体文本或彩色编码项目。

使用标记和可渲染对象以内容为中心
6:19 时,Tim 回答了如何将内容居中的问题。 普通的字符串不能居中。 您必须使用可呈现对象。 他进行了演示(6:34):
Panel panel = new(new Markup(panelInfo).Centered());Panel panel = new(new Markup(panelInfo).Centered());这将把字符串转换为标记,调用 .Centered(),并将其赋值给面板。 运行代码 (7:01) 显示所有名称居中。 如果您要创建一个新的表格、一个新的柱状图或任何交互式控件,并且希望内容在可用空间内水平对齐,这一点尤其有用。

Tim 还指出(7:07),面板是 IRenderable 的,因此您可以将它们嵌套到表格或其他面板中。 这使得构建复合显示成为可能:例如,包含提示、变量表和条形图的面板并排显示,或者使用面板显示不同任务的文件进度。
面板作为控制台应用程序的构建模块
最后(7:14),Tim 重申面板是 IRenderable 的,这意味着您可以在 Spectre.Console 希望呈现对象的任何地方插入面板--表格内、实时显示内或其他布局中。 这种灵活性使您能够将面板与其他 Spectre.Console 组件(如交互式提示、显示进度条和自定义彩色编码主题)结合起来,创建精美的 .NET 控制台应用程序。
从 Tim 的视频中获得的主要启示
Spectre 控制台面板是在控制台应用程序中突出显示内容、提示用户输入或框选数据的一种简单而强大的方式。
面板支持不同的样式:圆角、双层、自定义页眉以及用于控制空间的填充。
您可以显示列表,使用富文本标记自定义颜色主题,甚至使用 Markup.Centered() 将内容居中。
由于面板是一个可呈现的对象,因此您可以将其嵌套到表格中,与进度显示或条形图相结合,并构建复杂的交互式布局。
- 只需安装 NuGet 软件包并在您的 .NET 或 Visual Studio 项目中使用其强类型 API,即可获得所有这些功能。
通过观看 Tim Corey 的视频,您就可以自信地开始使用 Spectre.Console 面板,通过标题、自定义主题和整齐格式化的输出来创建精致、数据丰富的控制台体验,而这一切都无需离开控制台世界。

