Silverlight 4の印刷機能:RichTextBox編
ロジックコードを記述する
次に処理を記述します。
ソリューションエクスプローラ内のMainPage.xamlを展開し、MainPage.xaml.vbをダブルクリックしてコード画面を開きます。
リスト2のようにロジックコードを記述します。
リスト2: ロジックコード(MainPage.xaml.vb)
LINQ to XMLでXMLを処理するクラスの含まれる、System.Xml.Linq名前空間をインポートします。印刷の機能を提供するクラスの含まれるSystem.Windows.Printing名前空間をインポートします。ファイルの入出力に関するクラスの含まれる、System.IO名前空間をインポートします。
String型の新しいリストとして作成するメンバ変数myContentを宣言します。
XElementクラス用メンバ変数xmldocを宣言します。
■ページが読み込まれた時の処理
XElement.LoadメソッドでXML文書ファイル(syayou.xml)を読み込みます。読み込んだXML文書ファイルから要素のコレクションを取得するクエリ(query)を定義します。queryを実行します。
クエリコレクション内を反復処理する、変数resultを使って以下の処理を実行します。
新しいParagraphのインスタンスmyParagraphオブジェクトを生成します。
テキストのビジュアル・プロパティを設定します。
新しいRunのインスタンスmyRunオブジェクトを生成します。Runクラスは書式付き、または書式なしのテキストのセクションを表すクラスです。フォントサイズ、太字と文字色を指定し、Textプロパティに要素の内容を指定します。
以上の生成と設定ができたところで、myParagraphオブジェクトにmyRunオブジェクトを追加します。
表示されたタイトルの下に改行を追加するには、改行を表すLinebreakクラスを使います。新しいLinebreakのインスタンスmyLinebreakオブジェクトを生成して、myParagraphオブジェクトに改行を追加します。
新しいRunのインスタンスmyRun2オブジェクトを生成します。フォントサイズ、太字と文字色を指定し、Textプロパティに要素の内容を指定します。
以上の生成と設定ができたところで、myParagraphオブジェクトにmyRun2オブジェクトを追加します。
表示された著者名の下に改行を追加して、内容を表示させるのに、新しいLinebreakのインスタンスmyLinebreak2オブジェクトを生成して、myParagraphオブジェクトに改行を追加します。
新しいRunのインスタンスmyRun3オブジェクトを生成します。フォントサイズを指定し、Textプロパティに要素の内容を指定します。
以上の生成と設定ができたところで、myParagraphオブジェクトにmyRun3オブジェクトを追加します。
最後に、myRun、myRun2、myRun3の定義されたmyParagraphオブジェクトをRichTextBoxコントロールに追加します。
次に、要素の内容を1行ずつ読み取り、String型のリストであるメンバ変数myContentに追加しておきます。
このままでは、RichTextBox内に表示されるデータは、データの末尾から表示されてしまいます。そこで、先頭から表示する処理を記述します。それには、RichTextBox内の位置を表すTextPointerクラスを使います。ContentStartプロパティでRichTextBox内の先頭位置を表すTextPointer を取得します。GetNextInsertionPositionメソッドで、指定された論理方向(LogicalDirection.Forward)の、次の挿入位置となるTextPointer を取得します。LogicalDirection.Forwardで、TextPointerがRichTextBoxの指定された位置の直後に配置されます。
このように取得した値を、Selectメソッドに指定します。SelectメソッドにはTextPointerオブジェクトの同じ値(startPointer)を指定しています。これで、TextPointerが先頭に移動し、データが先頭から表示されるようになります。
■[印刷]ボタンがクリックされた時の処理
新しいPrintDocumentのインスタンスmyPrintオブジェクトを生成します。PrintDocumentクラスはSilverlightアプリケーションの印刷機能を提供するクラスです。
ページの印刷中に発生するPrintPageイベントでPrintPageGoプロシージャを実行します。印刷が完了したときに発生する、EndPrintイベントでは、EndPrintGoプロシージャを実行します。
Printメソッドで印刷キューに指定するドキュメントの名前を指定して、印刷を開始します。