最近、実験を兼ねて、Azure で遊んでます。
Blogも
http://kattoshi.azurewebsites.net/へ移動するかも
2012年12月19日水曜日
2012年1月29日日曜日
TextBlock にClipboardへのコピー機能を追加する(改訂版)
前回投稿した「TextBlock にClipboardへのコピー機能を追加する」ですが、
あのコードだと、メモリーは消費するわ、メモリーリークしまくるわで使えないことがわかりました。
ここに、改良版を投稿します
対応策として
あのコードだと、メモリーは消費するわ、メモリーリークしまくるわで使えないことがわかりました。
ここに、改良版を投稿します
- メモリーリークの問題
右クリックで表示しているContextMenuですが、その右クリックを監視している ContextMenuService自体がメモリーリークを起こしているみたいで、OwnerのTextblockが破棄されれもContextMenuServiceに設定されたContextMenuは残っているみたいです。 - メモリーの消費
コードを読めばわかると思いますが、TextBlockの配下にContextMenuServiceとContextMenu、その下にMenuItemが作成されます。これらの生成されたインスタンス「TextBlockClipBoardService.ID=""」によって、すべてのTextBlockの子となるので、メモリーの消費量がタダモンではありません。
(実際、設定されたTextBlockをDataGridのCellTempleteに設定したらスクロールが耐えられないほどカクカク)
対応策として
- なるべく生成するインスタンスを少なくする
ContextMenuService は諦め、シングルトンのPopupオブジェクトを表示する - メモリーリークをなくす
循環参照を撲滅する。
ラベル:
Silverlight4
2012年1月27日金曜日
TextBlock に Clipboard へのコピー機能を追加する
2011/01/29 追記
この方法は、不具合がありました。改訂版は「TextBlock に Clipboard へのコピー機能を追加する(改訂版)」で紹介してます。
とあるお客さんで 「TextBlock に表示している文字列を他のアプリへコピーしたいんだけど...」と要求がありました。
Silverlightで作成したプログラムはすでに完成間近。
手間がかからず、短期間で実装したコードを紹介する。
操作は、TextBlockのテキストを右クリックすると、コンテキストメニューが表示され、メニューを選択すると、クリップボードへコピーする。
参考URL:Silverlight で ContextMenu を使ってみる
この方法は、不具合がありました。改訂版は「TextBlock に Clipboard へのコピー機能を追加する(改訂版)」で紹介してます。
とあるお客さんで 「TextBlock に表示している文字列を他のアプリへコピーしたいんだけど...」と要求がありました。
Silverlightで作成したプログラムはすでに完成間近。
手間がかからず、短期間で実装したコードを紹介する。
操作は、TextBlockのテキストを右クリックすると、コンテキストメニューが表示され、メニューを選択すると、クリップボードへコピーする。
参考URL:Silverlight で ContextMenu を使ってみる
ラベル:
Silverlight4
登録:
投稿 (Atom)