2

IRC チャット プログラムである最初の WPF アプリケーションを作成しています。私はWPFが初めてなので、メッセージをどのように表示すればよいかわかりません。メッセージには太字、イタリック体の単語、さらには画像が含まれている可能性があるか、終了メッセージが単純なメッセージとは異なる色になっている可能性があるためです。

ネットで検索していて、いくつかの解決策を見つけました。ソリューションの最初のタイプは、RichTextBox を FlowDocument または単純な FlowDocument と共に使用し、何らかの方法でバインディング システムをハックしてプロパティの値を表示することです。「ハッキング」とは、つまり、これらのコントロールは DependencyObject ではないため、バインディング プロパティを持たないということです。(これが正しい表現かどうかはわかりません)。

単純な TextBlock では、文字列の値を表示するため、メッセージを表示できません。単純な文字列に多くのメッセージがあり、それに新しいメッセージを追加すると、文字列を変更できないため、大量のメモリ コピーが必要になります。さらに、TextBlock を使用する場合、そのコンテンツをマウスで選択してコピーできますか? 読み取り専用の TextBox を使用する場合、たとえば 1 つの単語だけにスタイリングを使用できますか?

そのため、ListView またはリスト (または任意のコレクション) のコンテンツを表示できるものを使用し、そのテンプレートを変更して各メッセージを正しく表示しようとしています。(そしてListViewの選択を何らかの形で無効にします)しかし、メッセージをスタイリッシュに表示して選択可能にするために、どのコントロールを使用すればよいかわかりません。

リストを使用してメッセージを保存するのはクールです。1,000 件までのメッセージが表示された後、最初の 100 件を削除してログ ファイルに保存したいからです。

したがって、この問題を解決する方法について完全に混乱しています。誰かがこの種の問題に対する適切な解決策を持っていることを願っています!

4

1 に答える 1

0

さて、ご存知のように、多くの可能性があります。

可能性の 1 つは、ObservableCollection<string>各要素が HTML である場所を持つことです。ListBox/ItemsControl を使用して、これらの行をバインドできます。ItemsControl DataTemplate では、TextBlock 要素を追加し、その Text プロパティを文字列に対してバインドできます。

トリックは、TextBlock の Inlines コレクションを変更し、HTML 文字列から TextBlock の具体的な Run() 要素を生成できる Converter を使用することです。TextBlock は、単語ごとに異なる色やその他多くの便利なものの下線を引くことができることに注意してください。インターネットはそのようなプロジェクト (google TextBlock 表示 HTML) でいっぱいです。

Image を実装するのは、よりトリッキーになるでしょう。私の知る限り、それを TextBlock に入れることはできません。画像をどのように挿入できるかは、要件によって異なります。Image() 要素が間にある「複数の」TextBlocks に 1 行を分割する必要がある場合があります。

そして、RichTextDocument がありますが、IRC クライアントにはあまり適していないように思えます。あなたはその機能の多くを必要としません。それは物事を複雑にし、遅くします。

于 2013-12-25T13:01:07.417 に答える