Panele treści i komunikaty - seria Spectre Console
Spectre.Console to pakiet NuGet, który umożliwia programistom .NET tworzenie aplikacji konsolowych o bogatej grafice. W swojej serii Spectre Console Series Tim Corey pokazuje, jak wykorzystać funkcje takie jak interaktywne podpowiedzi, tabele, wskaźniki postępu i inne, aby przekształcić zwykłe okno konsoli w coś znacznie bardziej Professional.
W tym artykułe przyjrzymy się bliżej funkcji Spectre Console Panel, analizując film Tima Coreya "Content Panels and Callouts – Spectre Console Series". Korzystając z przykładów Tima, zobaczymy, jak tworzyć panele, odkrywać ich funkcje i wyświetlać dane w różnych stylach — wszystko w ramach dostępnej przestrzeni konsoli.
Tworzenie podstawowego panelu konsoli Spectre
Tim rozpoczyna film (0:00), przypominając nam, że Spectre.Console pozwala przekształcić aplikacje konsolowe napisane w języku C# w atrakcyjne wizualnie i bogate w informacje aplikacje. W tej lekcji (0:15) stworzymy panele, które mogą pełnić rolę prostych objaśnień lub nawet mini tabel, w zależności od potrzeb.
W 0:34 Tim pisze przykład bezpośrednio w Visual Studio. Pokazuje, jak utworzyć nową instancję panelu:
var panel = new("Tim Corey");
AnsiConsole.Write(panel);
var panel = new("Tim Corey");
AnsiConsole.Write(panel);
Zauważa (0:47), że AnsiConsole.Write() akceptuje obiekt renderowalny — a ponieważ Panel implementuje IRenderable, idealnie się do tego nadaje. Uruchomienie kodu w 1:02 powoduje wyświetlenie prostego ramki wokół tekstu "Tim Corey". Nawet ta niewielka przestrzeń może być przydatna do umieszczenia uwagi, wyróżnienia podpowiedzi lub oddzielenia danych wprowadzonych przez użytkownika od innych wyników konsoli.

Odkrywanie funkcji panelu: obramowania i wypełnienie
Następnie Tim przechodzi do demonstracji funkcji panelu. O 1:22 dostosowuje styl obramowania:
panel.Border = BoxBorder.Rounded;
panel.Border = BoxBorder.Rounded;
Dzięki temu panel zyskuje zaokrągloną ramkę — jeden z dostępnych stylów. Zauważa, że można również wybrać podwójną ramkę lub inne opcje, aby dopasować je do własnych motywów z kodowaniem kolorami lub niebieskimi i zielonymi akcentami.
O 1:42 Tim dostosowuje wypełnienie wewnątrz panelu:
panel.Padding = new(2, 0);
panel.Padding = new(2, 0);
Wyjaśnia (2:16), że wypełnienie w konsoli nie przypomina pikseli w sieci — opiera się na szerokości znaków i znakach końca linii. Duża liczba, taka jak 5, tworzy duży panel, który zajmuje znaczną część dostępnego obszaru. Odlicza odstępy, aby zademonstrować, jak działa wypełnianie (2:35).
Ta możliwość precyzyjnego dostosowania przestrzeni wokół treści pozwala projektować panele dopasowane do układu, niezależnie od tego, czy wyświetlasz tabelę zmiennych, wykres słupkowy czy jakiekolwiek inne dane.
Dodawanie nagłówka i dostosowywanie stylów
O 3:37 Tim dodaje nagłówek do panelu:
panel.Header("My Name");
panel.Header("My Name");
Kiedy uruchamia kod o 3:51, tytuł pojawia się w ramce. Ale jest to w bezpośredniej sprzeczności z treścią. Naprawia to (4:04), zmieniając wypełnienie:
panel.Padding = new (1, 0);
panel.Padding = new (1, 0);
Powoduje to utworzenie niewielkiej przestrzeni między nagłówkiem a tekstem. Tim zwraca uwagę (4:16), że użycie nagłówków i odstępów pozwala na jasne oznaczenie paneli — jest to przydatne podczas pokazywania postępu zadania, wyświetlania na żywo, a nawet długotrwałego zadania z paskiem postępu.
Wyświetlanie list wewnątrz panelu
Następnie Tim pokazuje, jak umieścić listę ciągów znaków w panelu. O 4:26 autor przytacza listę nazw z poprzedniej lekcji i pokazuje, jak połączyć ją w jeden ciąg znaków:
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");
Spowoduje to zwinięcie listy do jednego ciągu znaków z podziałami na linie (5:02). Uruchomienie go (5:28) powoduje wyświetlenie listy w panelu, gdzie każda pozycja znajduje się w osobnym wierszu. Technika ta pozwala na prezentację danych lub właściwości obiektów w sposób silnie typowany, ale renderowany jako tekst.

Tim podkreśla również (5:44), że można użyć znaczników sformatowanego tekstu, aby nadać określonym elementom niestandardowy kolor. Na przykład:
"[red]Bilbo Baggins[/]"
"[red]Bilbo Baggins[/]"
To pokazuje, jak panel konsoli Spectre może obsługiwać nie tylko zwykłe ciągi znaków, ale także treści sformatowane, umożliwiając stosowanie motywów, pogrubionego tekstu lub elementów oznaczonych kolorami.

Wyrównanie treści do środka za pomocą znaczników i obiektów renderowalnych
O 6:19 Tim odpowiada na pytanie, jak wyśrodkować treść. Zwykły ciąg znaków nie zostanie wyśrodkowany. Zamiast tego należy użyć obiektu renderowalnego. Pokazuje on (6:34):
Panel panel = new(new Markup(panelInfo).Centered());
Panel panel = new(new Markup(panelInfo).Centered());
Powoduje to przekształcenie ciągu znaków w znacznik, wywołanie metody .Centered() i przypisanie go do panelu. Uruchomienie kodu (7:01) pokazuje wszystkie nazwy wyśrodkowane. Jest to szczególnie przydatne, jeśli tworzysz nową tabelę, nowy wykres słupkowy lub dowolne interaktywne elementy sterujące i chcesz, aby treść była wyrównana poziomo w dostępnej przestrzeni.

Tim zauważa również (7:07), że panele są IRenderable, więc można je zagnieżdżać w tabelach lub innych panelach. Umożliwia to tworzenie złożonych widoków: na przykład panelu zawierającego monit, tabelę zmiennych i wykres słupkowy umieszczone obok siebie lub wykorzystanie paneli do pokazania postępu przetwarzania plików dla różnych zadań.
Panele jako elementy składowe aplikacji konsolowych
Podsumowując (7:14), Tim powtarza, że panele są IRenderable, co oznacza, że można je wstawiać wszędzie tam, gdzie Spectre.Console oczekuje obiektu renderowalnego — wewnątrz tabel, wewnątrz wyświetłączy na żywo lub w innych układach. Ta elastyczność pozwala łączyć panele z innymi komponentami Spectre.Console, takimi jak interaktywne monity, paski postępu i niestandardowe motywy z kodowaniem kolorami, aby tworzyć dopracowane aplikacje konsolowe .NET.
Najważniejsze wnioski z filmu Tima
-
Panel konsoli Spectre to prosty, ale potężny sposób na wyróżnienie treści, wywołanie wprowadzania danych przez użytkownika lub wyeksponowanie danych w aplikacji konsolowej.
-
Panele obsługują różne style: zaokrąglone, podwójne, niestandardowe nagłówki oraz wypełnienie do kontrolowania odstępów.
-
Możesz wyświetlać listy, używać znaczników tekstu sformatowanego do tworzenia niestandardowych motywów kolorystycznych, a nawet wyśrodkować treść za pomocą Markup.Centered().
-
Ponieważ panel jest obiektem renderowalnym, można go zagnieżdżać w tabelach, łączyć z wskaźnikami postępu lub wykresami słupkowymi oraz tworzyć złożone interaktywne układy.
- Wszystko to jest dostępne po prostu poprzez zainstalowanie pakietu NuGet i użycie jego silnie typowanego API w projekcie .NET lub Visual Studio.
Korzystając z filmu Tima Coreya, możesz śmiało zacząć używać paneli Spectre.Console do tworzenia dopracowanych, bogatych w dane środowisk konsoli z nagłówkami, niestandardowymi motywami i starannie sformatowanym wyjściem — a wszystko to bez opuszczania świata konsoli.
