1

大家好,我有一个我认为很有趣的问题:

你们都知道并喜欢 Skype 聊天界面:每条消息都包含在一个气泡中,具有表情符号和链接功能,以及左侧的头像。

如果我正在创建类似 Skype 的界面,那么容纳每条消息的最理想 WPF 组件是什么?

我正在使用 MVVM,所以我的所有消息都作为 ObservableCollection 存储在 ViewModel 中。

我在绑定到 RichTextBox 时遇到了问题,因此我研究了绑定到 Listbox,其中每个列表项都是一条消息,并且每个项的样式都具有 Skypey 边框和头像等。

有任何想法吗?

4

2 回答 2

1

我发现的唯一合适的解决方案是使用 flowdocumentreader 和 ivalueconverter 将字符串数组转换为 flowdocument。一旦我制作了自己的类似于 bbcode 的脚本语言,它实际上工作得很好。

这是我从中学到的样本。http://michaelsync.net/2009/06/09/bindable-wpf-richtext-editor-with-xamlhtml-convertor

这对我来说有点矫枉过正,所以我最终只制作了 ivalueconverter 和一个简单的脚本语言。

于 2010-08-27T15:11:31.803 回答
0

我看到的解决方案是您应该使用 DataTemplate 和 Style。思路如下:每个文本消息由类对象表示。现在,当您在模板中绑定您的消息时,您明确告诉您希望您的消息看起来如何。您最好创建一个知道如何表示您的消息的用户控件。

代表类似想法但想法相同的示例:

    <Window.Resources>
<DataTemplate DataType="{x:Type model:MessageModel}">
    <ed:Callout AnchorPoint="0,1.5" Margin="10" CalloutStyle="RoundedRectangle" Content="{Binding Path=Text}" Fill="#FFF4F4F5" FontSize="14.667" HorizontalAlignment="Left" Height="100" Stroke="Black" VerticalAlignment="Top" Width="200" />                              
</DataTemplate>
</Window.Resources>

<Grid>
    <ItemsControl ItemsSource="{Binding Path=MsgList}" />
</Grid>

对于该示例,您需要附加 Blend 4 附带的 Microsoft.Expression.Drawing.sll。

于 2012-10-16T16:07:09.413 回答