2010-12-31 20 views
2

私はWPFを習得しようとしており、簡単なIRCクライアントの作成を考えていました。最も複雑な部分は、チャットログを作成することです。WPF(irc)チャットログコントロール

alt text

かのirssi::私はそれがmIRCの内の1つのように多かれ少なかれ見てみたい重要な部分は、テキストが選択可能でなければならないことです

alt text

、行が折り返さなければならないとかなり大きなログを処理できるはずです。

私が思い付くことができる選択肢がある:それは結合、動的コンテンツ/データのためのより適切と思われるので、各ラインは、行

  • リストビューであるScrollViewerの内部

    1. のStackPanel。
    2. 独自のレンダリングを行う独自のコントロールを作成します。

    どの方向にどこから始めるべきかというアイデアがあるWPFの達人はありますか?

  • 答えて

    2

    UIから独立した良いオブジェクトモデルを使い、複数行のTextBoxまたはRichTextBoxを試してみることをお勧めします。

    これで十分かどうかは、ログを取得できる期間によって異なります。パフォーマンスの問題が発生した場合は、仮想化を検討する必要があります。

    +0

    時々最も簡単な解決策がベストです。 user408952

    0

    まず、行全体(リストボックスのようなもの)だけを選択するか、行(テキストボックスのような)から特定の文字を選択するかを検討する必要があります。

    最初のケースでは、ListViewまたはListBoxでも十分であると思います。両方がコレクションにバインドされたときに仮想化をサポートし、膨大な量のデータに問題はないはずです。 ScrollViewerの中のスタックパネルは、このケースのためにホイールを再発明するようなもので、新しいコントロールを作成することは私の意見では非常にインスパイアされたアプローチではありません(WPFの既存のコントロールで実現することができます)。

    2番目のケースでは、行内のテキストを選択したい場合や、ログ内の最長行に単語の折り返しを入れ、折り返し行の個々の部分を選択する場合は、テキストを表示するためのコントロール。 Kentは既にRichTextBoxを提案していましたが、AvalonEditコントロールを追加するか、またはWebBrowserコントロールを追加して、HTMLDocumentを直接修正します。

    0

    パフォーマンス上の問題が発生した場合は、RichTextBoxも使用し、ログファイルまたはデータベースに項目を格納することをお勧めします。 別の解決策は、WPFのWebBrowserコントロールを使用して、とそのHTMLコンテンツをmodifiyすることです:

    webBrowser.NavigateToString("<HTML><H2><B>This page comes using String</B><P></P></H2></HTML>"); 
    

    More information about using WebBrowser control