Avalonia UI で Markdown をレンダリングするには、一般的な記事表示に利用できます。たとえば AI の応答内容が Markdown 形式の場合、Markdown.Avalonia または Markdown.AIRender を使用できます。この記事では後者を紹介します。前者の使い方はリンク先をご確認ください。
インストール
Markdown.AIRender を使用すると、Avalonia UI で簡単に Markdown のレンダリング機能を実装できます。NuGet パッケージマネージャーを使って、プロジェクトに Markdown.AIRender を簡単に追加できます。
Install-Package MarkdownAIRender
このインストールコマンドにより、必要な依存関係が自動的にダウンロードおよびインストールされ、以降の開発作業の基礎が整います。
スタイルにスタイルを参照する
Avalonia の Application スタイルに Markdown.AIRender のスタイルファイルを追加することは、正しく動作させるための重要な手順です。以下に具体的なコード例を示します。
<Application
...>
<Application.Styles>
<StyleInclude Source="avares://MarkdownAIRender/Index.axaml" />
</Application.Styles>
</Application>
これにより、Markdown.AIRender のスタイルがアプリケーションに統合され、アプリケーション全体のスタイルと一貫性を持たせることができます。Markdown.AIRender のデフォルトスタイルが関連要素に適用され、以降の Markdown レンダリングにスタイルサポートを提供します。
サンプル
まず、Markdown コンテンツを用意します。ローカルファイルから読み込んでも、ネットワークから取得しても構いません。ここではサンプルの Markdown コンテンツを示します。
## 更新履歴
### V0.0.1.1(2024-12-28)
- 🔨MarkdownAIRender を使用して Markdown をレンダリング
### V0.0.1.0(2024-12-25)
- 😄更新履歴を追加
- 🔨Excel エクスポート時に既存ファイルを上書きするように変更
- 🐛レンダリングされたテーブルデータのみエクスポートできていた問題を修正
これは典型的な Markdown コンテンツで、更新履歴の情報が含まれています。絵文字や一般的な Markdown 構文(見出し、リスト、バージョン情報)が使用されています。
次に、axaml で MarkdownRender 要素を使用して Markdown コンテンツをレンダリングします。
xmlns:md="https://github.com/AIDotNet/Markdown.AIRender"
<md:MarkdownRender Value="{Binding Markdown}" />
ここでの Value プロパティはデータバインディングによって Markdown コンテンツを MarkdownRender 要素に渡し、提供された Markdown コンテンツに応じてレンダリングし、画面上に表示します。このバインディング方式により、Markdown コンテンツを柔軟に更新できます。たとえば Markdown プロパティが変更されると、レンダリング内容も自動的に更新されます。
レンダリング結果
上記の設定により、以下のような美しい Markdown レンダリング結果が得られます。

このレンダリング結果は Markdown.AIRender の基本的な能力を示しており、Markdown コンテンツを視覚的な UI 要素に変換し、ユーザーに明確で読みやすい情報を提供します。
さらに
白黒テーマのサポート
基本的なレンダリング機能に加えて、Markdown.AIRender は白黒テーマもサポートしています。これにより、ユーザーのニーズやデザインスタイルに合わせた選択肢が広がります。

この GIF は白黒テーマでの切り替え効果を示しており、アプリケーションのインターフェイスがテーマに応じてどのように変化するかを直感的に確認でき、ユーザーの視覚的な好みに応えることができます。
Markdown テーマカラーのサポート
オンライン Markdown エディター を参考にして作成されていますが、現在は完全ではなく、改善中です。

テーマカラーのサポートにより、アプリケーション全体の色調やスタイルに合わせて、Markdown のレンダリング効果をさらにカスタマイズできます。テーマカラーを調整することで、Markdown コンテンツをアプリケーションのデザイン言語により統合し、より調和のとれたパーソナライズされたユーザー体験を提供できます。
国際化
多言語アプリケーション開発において、国際化は重要な考慮事項です。Markdown.AIRender は現在、Markdown 内のプログラミング言語の「コピー」ボタンなどの要素の国際化サポートを充実させています。これにより、アプリケーションがよりグローバルに対応できるようになり、世界中のユーザーがアプリケーションをより使いやすくなります。
国際化の実装においては、インターフェイス要素の翻訳だけでなく、コピーボタンのテキストやツールチップなどの機能要素の国際化も考慮する必要があります。Markdown.AIRender では現在この機能を改善中ですが、将来的には Markdown コンテンツの国際化をより強力にサポートする予定です。これにより、異なる言語環境でも一貫したユーザー体験を提供し、アプリケーションのユーザー層を拡大することができます。
リポジトリアドレス
Markdown.AIRender の完全なコードや詳細情報は https://github.com/AIDotNet/Markdown.AIRender で確認できます。ここでは、最新の更新を確認したり、問題を報告したり、コードに貢献したりして、プロジェクトの発展に参加できます。
また、開発中にはさまざまな問題に遭遇する可能性があります。以下に、いくつかの解決のヒントとアドバイスを示します。
問題解決とよくある質問
- パフォーマンスの問題: 長い Markdown コンテンツのレンダリングでパフォーマンスが低下する場合は、Markdown コンテンツを分割して読み込み・レンダリングするか、
Markdown.AIRenderのレンダリングアルゴリズムを最適化することを検討してください。非同期読み込みを利用して UI スレッドをブロックしないようにし、ユーザーインターフェイスの応答性を確保してください。 - スタイルの問題: レンダリング後のスタイルに満足できない場合は、
Index.axamlファイル内のスタイルを変更するか、対応するスタイルルールを上書きしてニーズに合わせて調整してください。Avalonia のスタイルメカニズムを使用して、フォントサイズ、色、余白などのスタイルプロパティを追加・変更できます。 - 互換性の問題: 使用している Avalonia のバージョンが
Markdown.AIRenderと互換性があることを確認してください。互換性の問題が発生した場合は、Markdown.AIRenderの GitHub リポジトリの Issue ページを確認し、他の開発者が同様の問題に遭遇していないか調べてください。最新バージョンのライブラリを使用するか、Avalonia のバージョンを更新して問題を解決してください。
Markdown.AIRender は非常に有望なライブラリであり、Avalonia UI での Markdown レンダリングに豊富な機能と優れた拡張性を提供します。開発が進むにつれて、さらに強力な機能と優れたユーザー体験が期待できます。
将来の展望
今後、Markdown.AIRender がさらに機能を充実・拡張することを期待しています。例えば:
- より多くのテーマ選択肢とカスタムテーマ機能を提供し、ユーザーが独自の Markdown レンダリング効果を簡単に作成できるようにする。
- 国際化サポートをさらに強化し、ボタンなどの要素の国際化だけでなく、Markdown コンテンツ内のコードブロックや引用などの要素に対しても多言語処理を可能にする。
- 大規模な Markdown 文書に対して、より高速かつ効率的にレンダリングできるようにパフォーマンスを向上させる。
継続的な最適化と改善により、Markdown.AIRender は開発者とユーザーにさらなる利便性とより良い体験を提供します。
この記事が、Markdown.AIRender を使用した Avalonia UI 開発の一助となれば幸いです。ご質問やご提案があれば、コメント欄や GitHub でお知らせください。