1

我正在创建一个小应用程序,它将读取、解析和格式化 lua 脚本的内容 - 具体来说,是由“大象”聊天记录插件创建的魔兽世界的SavedVariables文件。我想到的原型将生成一个实例数组,显示时间戳、玩家姓名、消息发布到的频道以及发布的消息。ListViewItem

我想让聊天消息像在游戏中一样呈现:游戏在他们的角色类别之后为聊天中“说话”的人的名字涂上颜色(例如,流氓的名字是黄色的,法师的名字是浅蓝色的) ,但是当涉及到ListViewItemand时ListViewSubItem,着色文本似乎是一个孤注一掷的交易。

是否可以添加功能ListView以将格式(或仅颜色)应用于属性中的文本ListViewItemListViewSubItem基于Text属性中的标记?

编辑:我在问是否可以通过派生类中的继承/多态的魔力将文本格式添加到 ListViewItem,如果可以,最好的方法是什么(工作量、代码安全性等) ?

4

2 回答 2

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它确实提供了更多格式选项,但它可能不像您需要的那样灵活。

由于 aRichTextBox允许灵活的文本格式,我想知道它是否可以以某种方式用作渲染器......

于 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 回答