🖥️

WPFで黒背景×緑文字のターミナル風UIを本気で作るテクニック集

に公開

WPFで黒背景×緑文字のターミナル風UIを本気で作る

「ターミナルっぽい見た目のアプリが作りたい」

エンジニアなら一度は思ったことがあるはず。黒背景に緑の文字、あのハッカー映画みたいなやつ。

個人開発のタスク管理ツール「tsk」で、それを WPFで本気でやった。

やってみると、想像以上に奥が深い。

👉 実際にやって分かった実践テクニックのまとめ。


完成形

┌─ tsk ──────────────────── 📌 ─ ×

│ > TODAY (3)
│ ▸ [ ] 0508 メール返信 #仕事
│   [x] 0508 日報提出 #仕事
│   [ ] 0504 議事録確認 ⚠+4d #仕事
│ > THIS WEEK (2)
│   [ ] 0509 設計書レビュー 📝▼ #仕事
│     📝 A棟3F 会議室B 14:00〜
│   [ ] 0509 週報提出 #仕事
│ > SOMEDAY (1)
│   [ ] ---- 本棚の整理 #プライベート
│                                  ▲
│                                  █
│                                  │
│                                  ▼
│ ─────────────────────────────────
│ > 金 レビュー #仕事
└── 5/8 (木)  3/8 done  ⚠1 ── tsk

1. フォント選定:埋め込みピクセルフォントという選択

ターミナル風UIの生命線は 等幅フォント

👉 ここを外すと全部崩れる。

結論

PixelMplus12 を埋め込む。

👉 日英等幅+ドット感+環境依存なし


なぜ埋め込みか

  • 環境に依存しない
  • 見た目が完全固定される
  • フォント未インストール問題が消える

👉 「見た目を支配できる」


なぜ他フォントがダメか

  • Consolas → ドット感が弱い
  • Yu Gothic → 幅が揃わない
  • Cascadia → 日本語が崩れる

👉 PixelMplus12 一択


2. ウィンドウ:タイトルバーを殺す

デフォルトは邪魔。

👉 まず消す。

WindowStyle=None
AllowsTransparency=true

👉 自前で作る


3. ListBoxを捨てた

最初は使うつもりだった。

👉 無理だった。

  • 勝手に青くなる
  • ホバーで壊れる
  • 思い通りに制御できない

👉 余計なことをする


結論

全部捨てた。

👉 Grid + TextBlock


4. RenderDisplay

UIは全部ここ。

👉 毎回作り直す

👉 1箇所で完結


なぜこれでいいか

  • データ量が少ない
  • シンプル
  • 全体が見える

👉 Bindingより楽


5. スクロールバー

デフォルトは使わない。





👉 文字で描く


6. テーマ

色はまとめる。

👉 ThemeColorsで一元管理


重要ポイント

👉 Overdue色はテーマごとに変える

→ 見分けがつかなくなるため


7. タグ色

hash % パレット

👉 同じタグは同じ色


8. 入力欄

👉 透明TextBox

👉 CaretBrush忘れると終わる


9. ContextMenuの地雷

👉 デフォルトテンプレートが白

👉 Styleでは消えない


解決方針

👉 無理に戦わない

👉 サブメニューを消す


10. ステータスバー

👉 普段は静か

👉 異常時だけ主張


全体構造

👉 Window + Grid + TextBlock + TextBox

👉 それだけ


コツまとめ

  • フォントが最重要
  • ListBoxは捨てる
  • UIは全部自分で描く
  • 中途半端が一番つらい

👉 やるなら全部やる


まとめ

WPFは自由。

👉 ただし全部責任が来る


ダウンロード

GitHub

https://github.com/moritan777/tsk-releases/releases/latest

tsk_vXXX.zip をダウンロードして展開 → tsk.exe で起動


作者:mitsukida
お問い合わせ:mmitsuki0806@gmail.com

🔗 次の記事

https://zenn.dev/mitsukida/articles/3a504a1762605d

Discussion