跳至页脚内容
Iron Academy Logo
C# 应用程序
C# 应用程序

其他类别

颜色和样式以及可重用性 - Spectre 控制台系列

Tim Corey
9分57秒

Spectre Console 是一款功能强大的 .NET NuGet 软件包,允许开发人员将普通的控制台应用程序转变为视觉丰富的体验。 通过结合 Spectre Console 颜色、文本装饰和可重复使用的样式,您可以将普通的控制台输出提升为内容丰富的精美输出。

在他的视频"颜色、样式和可重用性 - Spectre 控制台系列"中,Tim Corey 向我们介绍了如何做到这一点。 在本文中,我们将逐步介绍蒂姆提出的相同要点,并指出时间戳,以便您可以一起观看。 这是了解如何创建和自定义颜色、样式类,甚至是重复使用的新样式的好方法。

Spectre 控制台格式化简介

0:00 时,Tim 解释说 Spectre Console "可以让您将控制台应用程序变成视觉上吸引人、内容丰富的应用程序"。他指出,这个系列将库分成小块,这样开发人员就可以一次专注于一项功能。

他在描述中指出了源代码链接,并邀请用户订阅他的频道。 本课的重点是如何在控制台输出中设置和返回格式化文本,以及如何在整个程序中重复使用这些格式。

使用内联标记和 MarkupLine

0:36 时,Tim 开始演示 AnsiConsole.MarkupLine 和 AnsiConsole.Markup。这些方法可以让您直接在字符串表示中嵌入颜色和装饰。

正如 Tim 在 0:51 所解释的,Markup 不会自动插入新行,而 MarkupLine 则会--"这有点像 Console.Write 与 WriteLine"。当你想在不同的行上显示多个项目或列表时,这种区别就很重要了。

他输入 ([red]This is the inline markup[/] )并运行,显示出一个红色字符串。 然后,在 1:38 处,他演示了前景色和背景色--"白底红字"--这样用户就能看到白底红字。 到 2:05 时,他添加了黑体作为装饰。

Tim 在 2:18 指出,内联标记对于小操作来说快速而简单,但当你希望在不同功能间使用更有结构或可重复使用的样式时,"它对于所有其他操作来说并不是很好"。

Spectre Console Colors Styles Reusability 1 related to 使用内联标记和 MarkupLine

创建预设样式类

在 2:32 处,Tim 演示了如何创建一个样式类的新实例以供重用。 他写道

var dangerStyle = new Style(
    foreground: Color.Red,
    background: Color.White,
    decoration: Decoration.Bold);
var dangerStyle = new Style(
    foreground: Color.Red,
    background: Color.White,
    decoration: Decoration.Bold);

在这里,Tim 指定了一个名为 dangerStyle 的变量,其中包含一个前景为红色、背景为白色、装饰为粗体的新样式。 他还指出,在 3:26 处,您不必填充每个论点--您可以根据需要只选择前景或装饰。

这种基于类的方法使您能够在一个地方更新样式,并在呈现文本的任何地方一致地应用,而不是重复标记标签。

使用新标记应用样式

在 3:48 处,Tim 演示了如何应用这种风格。 由于 AnsiConsole.WriteLine 不能直接接受样式,因此您必须使用带有新标记对象的 AnsiConsole.Write:

AnsiConsole.Write(
    new Markup("Danger text from style", dangerStyle));
AnsiConsole.Write(
    new Markup("Danger text from style", dangerStyle));

在 4:08 处,他解释说 WriteLine 只接受字符串或简单类型,但 Write 有一个接受 IRenderable 对象的重载。 这就是为什么您要将自己的风格传递给新的标记,然后再进行编写。

Tim 在 4:45 指出,这种语法 "比较费事",但它是显示样式化文本的官方方式。 他甚至建议,如果你经常这样做,可以创建自己的方法来简化翻译。

Spectre Console Colors Styles Reusability 2 related to 使用新标记应用样式

处理换行和光标位置

运行代码后,Tim 在 5:44 处指出光标与样式文本位于同一行。 这是因为 Write 不会添加新行。在 6:07 处,他展示了如何通过在字符串内添加 \n 来解决这个问题,这样光标就会向下移动。

这个小技巧可以确保您的输出符合您的期望--这在构建大型控制台应用程序时非常重要,因为在这些应用程序中,用户输入或数据会出现在样式提示之后。

添加多个装饰

接下来,蒂姆演示了装饰的组合。 在 6:27 处,他说:"如果您想应用多个装饰怎么办? 例如,我也想使用斜体"。您可以使用单个管道字符来分隔装饰。

他向大家展示了一长串的装饰--粗体、斜体、删除线、下划线、变暗、反转、闪烁,甚至在 7:05 处提到了 Windows PowerShell 和 Windows 终端支持。目前,在 Windows 终端中,慢速闪烁和快速闪烁看起来是一样的。

到 7:29 时,他再次运行代码,显示除了粗体外,还应用了斜体样式。 "Tim 在 7 分 49 秒时说:"你可以随意混合和搭配这些内容,创造出可以重复应用的风格。

当您想用红色突出显示错误,用绿色突出显示成功信息,用黄色突出显示警告,或者用蓝色、紫色、兰色甚至栗色突出显示自定义标签时,Spectre Console 支持完整的 RGB 颜色集,这是一项强大的功能。

混合内联和预设样式

在 8:02 分,Tim 演示了如何将不同风格的 "写 "和 "写 "结合起来。 您可以多次调用 AnsiConsole.Write--首先使用您的样式文本,然后使用未样式或不同样式的文本--以突出显示一行的一部分。他展示了

AnsiConsole.Write(new Markup("Danger text", dangerStyle));
AnsiConsole.WriteLine(" and more");
AnsiConsole.Write(new Markup("Danger text", dangerStyle));
AnsiConsole.WriteLine(" and more");

正如 Tim 在 8:37 所解释的,这就是使用 Write 而不是 WriteLine 的原因:您可能只想突出显示文本的一部分,然后再返回正常样式。

Spectre Console Colors Styles Reusability 3 related to 混合内联和预设样式

该功能为您提供了一种灵活的方式来构建复合输出(可能是一个数据表、一个用于长期运行工作的进度条或一个包含多列的面板),并仅对某些项目或标签应用样式。

总结 - 您的选择

到 9:01 时,Tim 总结了备选方案:

  • 使用 [color]text[/] 和 Markup 或 MarkupLine 进行内联样式设置,以便快速格式化。

  • 或者使用 new Style() 创建新样式,并在调用 AnsiConsole.Write 时将其应用于标记对象。

9:26 时,Tim 鼓励观众 "尝试使用不同的颜色、背景和装饰以及其他所有东西"。这包括制作带有样式标题的新表格,添加一个进度条,在处理文件或项目数组时更新,甚至将 JSON 数据转换成样式显示。

在 9:33 结束时,他向观众表示感谢,并提醒他们他是 Tim Corey。 本系列以 Patrik Svensson 创建的 Spectre Console 库为基础,Phil Scott 等开发人员也参与其中,Tim 的视频将帮助您快速掌握其功能。

结论

Tim Corey 的视频清楚地展示了 Spectre Console 如何将普通的控制台应用程序变得具有视觉吸引力。 从内联标记到完全可重用的样式类,他一步一步地介绍了如何控制前景和背景颜色、文本装饰和光标位置。

如果您按照上面时间戳中 Tim 的示例进行操作,您就能在短时间内为自己的控制台应用程序添加专业的样式,而无需猜测语法。 一旦您知道如何分配变量、添加装饰和渲染样式文本,您就可以轻松地将这些技能扩展到构建表格、面板、进度条以及 Spectre Console 提供的其他功能。

正如 Tim 所说,"试试看......看看你喜欢什么"。

Hero Worlddot related to 颜色和样式以及可重用性 - Spectre 控制台系列
Hero Affiliate related to 颜色和样式以及可重用性 - Spectre 控制台系列

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我