1

やあみんな、私は興味深い質問だと思うものを持っています:

Skype のチャット インターフェイスはご存知のとおり、気に入っています。各メッセージは吹き出しで囲まれ、絵文字とリンク機能があり、左側にアバターが表示されます。

Skype のようなインターフェイスを作成する場合、各メッセージを格納するのに最も理想的な WPF コンポーネントは何ですか?

私は MVVM を使用しているため、すべてのメッセージは ViewModel に ObservableCollection として保存されます。

RichTextBox へのバインドに問題があったため、各リスト項目がメッセージであり、各項目が 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 に答える