2012-06-04 39 views
1

我正在創建一個小應用程序,用於讀取,解析和格式化lua腳本的內容 - 具體來說,由「Elephant」聊天記錄附加組件創建的魔獸世界中的SavedVariables文件。我想到的原型將生成一個ListViewItem實例數組,其中顯示時間戳,玩家姓名,消息發佈到哪個頻道以及發佈的消息。在ListView中格式化文本?

我想讓聊天信息呈現在遊戲中:遊戲在聊天之後在角色的課程中着色聊天中的那些人的名字(例如流氓的名字是黃色的,法師的名字是淡藍色),但是當涉及到ListViewItemListViewSubItem時,着色文本似乎是全有或全無的處理。

是否可以添加功能爲ListView應用格式(或只是顏色)基於Text屬性標記在ListViewItemListViewSubItem發送短信?

編輯:我問是否有可能通過派生類中的繼承/多態性的魔力,將文本格式添加到ListViewItem中,如果是這樣,那麼最好的方法是什麼(工作量,代碼安全等)?

+0

這似乎是你必須創建一個自定義'ListView'控制。請參閱[這裏](http://stackoverflow.com/a/11323/1244630)關於格式化一個'Label'的類似問題。 – Pooven

+0

我想我必須做一個自定義的ListView,ListViewItem或ListViewSubItem。我還不夠清楚 - 我問是否可以通過派生類中的繼承/多態性的魔力將文本格式添加到ListViewItem中,以及實現它的最佳方式是什麼(工作量,代碼安全性,等等)。我會編輯我的問題來反映這一點。 –

回答

0

IM不能完全肯定這會工作,我真的不能測試,但它可能是值得一試

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

這裏的基本想法是,在列表框中的項目你有一個內容演示即我認爲擁有文本塊。在此範圍內,您可以設置各個運行標籤(單個文本的位),並且可以以不同方式格式化每個標籤。您還應該能夠在運行標籤分配名稱時以編程方式設置文本

1

Windows窗體說明使用視圖點,可以手動呈現項目。但是,您還應該考慮以下情況:文本超出Control /列的範圍時應如何呈現文本?

這隻要求您繼承ListView;您可以使用呈現每個項目:

protected override void OnDrawItem(DrawListViewItemEventArgs e) 

當然,OwnerDraw必須設置爲trueDrawListViewItemEventArgs包含需要呈現的文本和應該用於呈現文本的Graphics實例。然後,您可以使用DrawString(string s, Font font, Brush brush, float x, float y)按照您的標記約定來呈現文本的每個部分。

如果您不介意GPL,ObjectListView的確提供了更多的格式選項,但它可能不像您所需的那樣靈活。

由於RichTextBox確實允許靈活的文本格式,我不知道是否可以在某種程度上被用作渲染...