1

luaスクリプトの内容を読み取り、解析し、フォーマットする小さなアプリを作成しています。具体的には、「Elephant」チャットロギングアドオンによって作成されたWorldofWarcraftSavedVariablesファイルです。私が考えているプロトタイプは、タイムスタンプ、プレーヤー名、メッセージが投稿されたチャネル、および投稿されたメッセージを示すインスタンスの配列を生成します。ListViewItem

チャットメッセージをゲームと同じようにレンダリングしたいのですが、ゲームでは、キャラクターのクラスの後にチャットで「話している」人の名前に色が付けられます(たとえば、ローグの名前は黄色、メイジの名前は水色です)。 、しかし、ListViewItemそしてListViewSubItem、テキストを着色することになると、オール・オア・ナッシングの取引があるようです。

プロパティのマークアップに基づいて、またはに基づいListViewてテキストにフォーマット(または単に色)を適用するための機能を追加することは可能でしょうか?ListViewItemListViewSubItemText

編集:派生クラスの継承/ポリモーフィズムの魔法を使ってListViewItemにテキストフォーマットを追加することは可能かどうかを尋ねています。そうであれば、それを行うための最良の方法は何ですか(労力、コードセキュリティなど) ?

4

2 に答える 2

1

Windows フォームの使用の観点から言えば、アイテムを手動でレンダリングできます。Controlただし、次のような状況も考慮する必要があります。テキストが/columnの境界を超えた場合、テキストをどのようにレンダリングする必要がありますか?

これには、から継承する必要があるだけですListView。以下を使用して各アイテムをレンダリングできます。

protected override void OnDrawItem(DrawListViewItemEventArgs e)

もちろん、OwnerDrawに設定する必要がありますtrueDrawListViewItemEventArgsレンダリングする必要があるテキストと、Graphicsテキストのレンダリングに使用するインスタンスが含まれています。DrawString(string s, Font font, Brush brush, float x, float y)次に、 を使用して、マークアップ規則の必要に応じてテキストの各部分をレンダリングできます。

GPL を気にしない場合は、ObjectListViewより多くの書式設定オプションが提供されますが、必要なほど柔軟ではない可能性があります。

RichTextBoxは柔軟なテキスト フォーマットを可能にするので、何とかレンダラーとして使用できないだろうか...

于 2012-07-27T09:19:43.130 に答える
0

これが機能するかどうか完全には確信が持てず、実際にテストすることはできませんが、試してみる価値があるかもしれません

<ListViewItem>
   <ContentPresenter>
       <TextBlock>
          <Run x:Name="playerName" Foreground="Blue" Text="NAME"/>
          <Run x:Name="etc" Foreground="Black" Text="..."/>
        </TextBlock>
     </ContentPresenter>
 </ListViewItem>

ここでの基本的な考え方は、リスト ボックス項目に、テキストブロックを保持していると思われるコンテンツ プレゼンターがあるということです。この中で、個々の実行タグ (個々のテキストのビット) を設定し、それぞれを異なる形式にすることができます。実行タグに名前が割り当てられている場合は、プログラムでテキストを設定することもできます

于 2012-07-26T13:39:23.117 に答える