<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Silverlight</title><link>http://blogs.wankuma.com/jitta/category/1749.aspx</link><description>Silverlight</description><managingEditor>はなおか じった</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>はなおか じった</dc:creator><title>Silverlight 3 新機能</title><link>http://blogs.wankuma.com/jitta/archive/2009/03/25/170213.aspx</link><pubDate>Wed, 25 Mar 2009 22:17:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2009/03/25/170213.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/170213.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2009/03/25/170213.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/170213.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/170213.aspx</trackback:ping><description>&lt;p class="p"&gt;ネタもと：&lt;a href="http://silverlight.net/getstarted/silverlight3/default.aspx" title="⇒silverlight.net" class="outerLink"&gt;Get Started : The Official Microsoft Silverlight Site&lt;/a&gt;&lt;/p&gt;
&lt;p class="p"&gt;以下、「WHAT'S NEW IN SILVERLIGHT BETA?」を翻訳。翻訳内容については正確性を保証しない。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Visual Studio および Expression Blend によって完全にサポートされた、Silverlight 3 の新機能ハイライトです。主要なメディアの拡張、ウェブ ブラウザのサポートなしにウェブ アプリケーションをデスクトップで動作させる、3D-グラフィックをサポートする重要な図形処理の改良、GPU アクセサレーションと H.264 ビデオのサポート、そしてたくさんの RIA 開発生産性を改善する機能。同じく、全ての .NET 開発ツールを統合するために、Visual Studio 2010 は、編集可能な対話型 Silverlight デザイナーをサポートするでしょう。では、Silverlight 3の新機能の数々です。&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;b&gt;より品質の高いビデオとオーディオのサポート&lt;/b&gt;&lt;br /&gt;
 H.264 アドバンスド オーディオ コーディング（AAC）のネイティブ サポートと、ライブおよび音 デマンド IIS7 スムーズ ストリーミング、Full-FD（720p+）再生、そして拡張可能なデコーダー パイプラインをサポートすることで、Silverlight 3はリッチ、フル-スクリーン、途切れのないメディア エクスペリエンスをデスクトップに提供します。新しく、また拡張された Silverlight 3のメディア機能は、次の通りです。
  &lt;ul&gt;
   &lt;li&gt;&lt;b&gt;ライブ、またオン デマンドの、HD（720p+）スムーズ ストリーミング&lt;/b&gt;&lt;br /&gt;
   IIS メディア サービス（旧 IIS メディア パック）、CPU やネットワークの状態をダイナミックに検出し、シームレスに切り替えることによるスムーズなストリーミング配信を可能にする、統合された HTTP メディア配信プラットフォームを提供します。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;フォーマット&lt;/b&gt;&lt;br /&gt;
   VC-1/WMA のネイティブ サポートに加え、MPEG4 をベースとする H.264/AAC オーディオをネイティブ サポートし、ハイ クオリティーなコンテンツを、様々なコンピューターやデバイスに対して配信することを可能にします。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;フル-スクリーンでの HD 再生&lt;/b&gt;&lt;br /&gt;
   GPU によるハードウェア アクセサレーションによって、フル-スクリーンでの HD（720p+）再生を可能にします。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;メディア フォーマットの拡張サポート&lt;/b&gt;&lt;br /&gt;
   RAW AV のパイプラインにより、Silverlight はサード パーティーによる様々なコーデック サポートを可能にします。オーディオとビデオは、ネイティブにサポートするコーデックのみでなく、実行時に外部でデコードされ、Silverlight 上でレンダリングされます。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;産業主導型コンテンツ保護&lt;/b&gt;&lt;br /&gt;
   Silverlight DRM は、PlayReady コンテンツ保護によって、AES 暗号化または Windows メディア DRM を使って保護されたブラウザー内エクスペリエンスを可能にします。&lt;/li&gt;
  &lt;/ul&gt;&lt;/li&gt;
 &lt;li&gt;&lt;b&gt;より豊かな経験の強化&lt;/b&gt;&lt;br /&gt;
 Silverlight 3では、デザイナーと開発者次世代のウェブ ビジュアルを作成していただくため、新しい3D図形処理、アニメーション処理、ハードウェア アクセサレーション、テキスト処理の改良を行いました。これらの機能は、以下の通りです。
  &lt;ul&gt;
   &lt;li&gt;&lt;b&gt;大局的3Dグラフィクス&lt;/b&gt;&lt;br /&gt;
   Silverlight 3は、開発者とデザイナーに3次元プレーンを提供します。利用者は、追加コードを書くことなしに、コンテンツを回転、拡大縮小させることができます。その他の変形や効果が含まれます。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;ピクセル シェーダー&lt;/b&gt;&lt;br /&gt;
   これらのソフトウェアによる効果は、ブルーアやドロップ シャドウを含みます。さらに、効果を追加することが可能です。効果は、どんなグラフィック コンテンツにでも適用することができます。例えば、ボタンについて、ボタンを押した際にドロップ陰影効果を使うことで、変更でいるように表現することが可能です。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;ビットマップ キャッシィング&lt;/b&gt;&lt;br /&gt;
   Silverlight 3では、ビットマップの中にベクトル図形やコントロールをキャッシュすることにより、アプリケーションのレンダリング性能を劇的に改善します。この機能は、背景や内部の外観の変化に影響されないでスケーリングを行うコンテンツに対して有効です。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;新しいビットマップ API&lt;/b&gt;&lt;br /&gt;
   Silverlight 3では、開発者はビットマップにピクセルを描画することができます。写真を赤目修正したり、スキャンしたドキュメントを編集したり、スクリーン上のエレメントからビットマップにキャッシュされる特別な効果を作成したりすることができます。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;アプリケーション テーマのサポート&lt;/b&gt;&lt;br /&gt;
   開発者は、アプリケーションにスタイルを適用し、実行時に変更することができます。さらに、スタイルを階層化することができます。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;アニメーション効果&lt;/b&gt;&lt;br /&gt;
   Silverlight 3では、跳躍やバウンドのような新しい効果を提供します。これらはアニメーションを、よりいっそう自然にします。開発者は、数学的関数を用いて新しいアニメーションを開発することができます。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;コントロールのスキン拡張&lt;/b&gt;&lt;br /&gt;
   Silverlight 3では、コントロールのセットを外部に保持することによって、スキン機能を提供します。これは、スタイル、コントロール スキンをアプリケーション間で共有できることを意味します。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;テキスト描画の改良と、フォントのサポート&lt;/b&gt;&lt;br /&gt;
   Silverlight 3では、いっそう効率的な表現、および敏速なアニメーション テキストを実現しました。ローカルなフォントを使用することで、アプリケーションの読み込みスピードもアップします。&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;b&gt;リッチなインターネット アプリケーション生産性の進歩&lt;/b&gt;&lt;br /&gt;
 新機能は、以下の通りです。
  &lt;ul&gt;
   &lt;li&gt;&lt;b&gt;60以上のコントロールとソース コード&lt;/b&gt;&lt;br /&gt;
   Silverlight 3は、60を超えるハイ クオリティで、スキン化されたチャートやメディアのようなコントロール、dock や viewbox のような新しいレイアウト コンテナー、オート コンプリートやツリー ビュー、データ グリッドのようなコントロールでいっぱいです。コントロールは、9つの専門的なデザインされたテーマを伴います。そして、修正してリコンパイルするか、あるいは提供されるまま使用することができるソース コードが付属します。その他、複数選択可能な ListBox コントロール、ファイル出力を簡単にする、ファイル保存ダイアログがあります。また、マルチ ページ アプリケーションをサポートし、そのためのナビゲーターが付属します。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;ディープ リンク&lt;/b&gt;&lt;br /&gt;
   Silverlight 3では、RIA でブックマーク可能な Deep Link をサポートします。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;SEO 対策&lt;/b&gt;&lt;br /&gt;
   Silverlight 3は、RIA でしばしば問題とされる、SEO 対策を可能にします。サーバー上のビジネス オブジェクトを利用することで、ASP.NET コントロールおよびサイト マップにより、HTML 中に簡単かつ自動的に RIA コンテンツがコピーされます。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;拡張されたデータ サポート&lt;/b&gt;
    &lt;ul&gt;
     &lt;li&gt;&lt;b&gt;エレメント間バインディング&lt;/b&gt;&lt;br /&gt;
     UI デザイナーは、より説得力のある UI 経験のために、ふたつの UI プロパティをバインドすることができます。Silverlight では、XAML によって、CLR オブジェクトと UI コンポーネントのプロパティをバインドすることができます。例えば、スライダーをメディア プレイヤーのボリュームコントロールにバインドすることができます。&lt;/li&gt;
     &lt;li&gt;&lt;b&gt;データ フォーム&lt;/b&gt; コントロールは、データのページング、交信、検証、そしてフィールドの配置をサポートする機能を提供します。&lt;/li&gt;
     &lt;li&gt;&lt;b&gt;データ検証の新しい機能&lt;/b&gt;は、正しくない入力値を自動的に見つけて、そして組み込まれた検証コントロールによってユーザーに警告を発することです。&lt;/li&gt;
     &lt;li&gt;&lt;b&gt;ビジネス オブジェクトのサポート&lt;/b&gt;により、クライアントとサーバーの両方で、N 階層データをサポートします。追加されたサポートにより、データを扱ってロード、ソート、フィルターそしてページングをすることはたやすくなるでしょう。新しく含まれることになった CollectionView は、サーバー サイドにおける合成操作を行います。新しい .NET RIA サービスが、これらの機能を提供します。&lt;/li&gt;
    &lt;/ul&gt;
   &lt;/li&gt;
   &lt;li&gt;&lt;b&gt;パフォーマンスの改善&lt;/b&gt;
    &lt;ul&gt;
     &lt;li&gt;&lt;b&gt;アプリケーション ライブラリ キャッシュ&lt;/b&gt;は、描画性能を改善するためにクライアントでフレームワークをキャッシュして、アプリケーションのサイズを小さくします。&lt;/li&gt;
     &lt;li&gt;&lt;b&gt;ディープ ズームの拡張&lt;/b&gt;によって、ユーザーはズーミングのための大きなイメージの集合を停滞なく操作することができます。&lt;/li&gt;
     &lt;li&gt;&lt;b&gt;バイナリ XML&lt;/b&gt; は、通信をサーバーで圧縮して、データの交換スピードを上げます。&lt;/li&gt;
     &lt;li&gt;&lt;b&gt;ローカル接続&lt;/b&gt;という機能は、クライアント サイドの2つの Silverlight アプリケーションが、サーバーへのラウンドトリップなしに互いに通信することを可能にします。例えば、ひとつはチャート、ひとつはデータ グリッドを表示して、互いに通信しあうことができます。&lt;/li&gt;
    &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;b&gt;拡張されたアクセシビリティ&lt;/b&gt;&lt;br /&gt;
 Silverlight 3では、オペレーティング システムが提供するハイ コントラスト配色への変更を可能にして、視覚障害がある人が判読性を高める方法を用意しています。&lt;/li&gt;
 &lt;li&gt;&lt;b&gt;ブラウザーの外で実行&lt;/b&gt;&lt;br /&gt;
 Silverlight 3の新しいブラウザー外エクスペリエンスは、気に入った Silverlight アプリケーションを PC や Mac のデスクトップ、あるいはスタート メニューに配置して、追加のランタイムやブラウザー プラグインをダウンロードすることなしに実行することを可能にします。さらに新しいエクスペリエンスは、コンピューターがインターネットに接続されているか否かにかかわらず、Silverlight アプリケーションを実行することを可能にします。伝統的な Web エクスペリエンスからの劇的な改良点です。次の機能が含まれます。
  &lt;ul&gt;
   &lt;li&gt;&lt;b&gt;ブラウザー外での実行&lt;/b&gt;が可能になったことで、Silverlight アプリケーションは軽快なウェブ コンパニオンとして、デスクトップにインストールされ、そして実行することができます。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;デスクトップ ショートカットと、スタート メニューのサポート&lt;/b&gt;をしたことで、PC でも Mac でも、スタート メニューやアプリケーション フォルダーにリンクを保存して、ワン クリックで実行することができます。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;セーフ アンド セキュア&lt;/b&gt;を実現するため、.NET フレームワークのセキュリティ機能を強化しました。Silverlight アプリケーションは分離ストレージを持つ安全な三度 ボックスで実行されます。これらのアプリケーションは、伝統的なウェブ アプリケーションとほぼ同じセキュリティ制約事項を持ちます。しかし、ユーザー操作を中断しないように、セキュリティ警告やプロンプトを表示しないように信頼される事があります。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;スムーズなインストール&lt;/b&gt;を実現するために、Silverlight アプリケーションはローカル キャッシュに格納されます。そして、実行には余分な権限を必要としません。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;自動更新&lt;/b&gt;機能により、Silverlight アプリケーションは起動されると、サーバーに新しいバージョンがないか検索します。新しいバージョンがある場合、自動的に更新されます。&lt;/li&gt;
   &lt;li&gt;&lt;b&gt;インターネット接続の検出&lt;/b&gt;機能により、Silverlight アプリケーションはインターネットに接続されているかどうかを検出します。もし接続がたたれている場合、接続が復旧するまで、ユーザーのデータをキャッシュするなど、接続状態にインテリジェントに対応します。&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/li&gt;
&lt;/ul&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/170213.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>[Silverlight 奮戦記]コントロールの大きさをブラウザに追従させる</title><link>http://blogs.wankuma.com/jitta/archive/2008/12/12/163562.aspx</link><pubDate>Fri, 12 Dec 2008 23:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2008/12/12/163562.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/163562.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2008/12/12/163562.aspx#Feedback</comments><slash:comments>25</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/163562.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/163562.aspx</trackback:ping><description>&lt;p class="p"&gt;メールにて、質問をいただきました。タイトルのように、・・・あれ？逆だ。ブラウザのサイズ変更にコントロールを追従させる、だ。&lt;/p&gt;
&lt;br&gt;
&lt;p class="Rtype"&gt;私も知りません。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;ではつまらないので、調べます。&lt;/p&gt;
&lt;p class="p"&gt;まず、ドキュメント。&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bce7684a-507b-4fc6-bc99-6933cd690cab&amp;DisplayLang=ja" title="⇒microsoft.com" class="outerLink"&gt;CHM なドキュメント&lt;/a&gt;には、クラス ライブラリの説明だけでなく、技術背景なども書かれています。目次でいうと、「Silverlight の概要」「はじめに」のあたりです。このあたりは、時間を作って一度目を通しておくことを勧めます。で、「ビジュアル デザイン」→「Silverlight のレイアウト システム」のあたりが該当しそうです。読んでいくと、「全画面表示サポート」の中に、Content.ActualWidth プロパティへの参照があります。これっぽいです。&lt;/p&gt;
&lt;p class="p"&gt;で、「Content.ActualWidth プロパティ」の説明を読んでいくと、表示が完了した直後に Resized イベントが発生し、それ以降に ActualWidth プロパティで現在の実際の横幅が取れるとあります。&lt;/p&gt;
&lt;p class="p"&gt;じゃぁ、ってんで、Resized イベントのハンドラを追加してみます。すると、Page クラスについては SizeChanged イベントが発生するようです。なので、こっちをハンドルします。すると、SizeChangedEventArgs クラスが引数として付いてきます。この中の NewSize プロパティと PreviousSize プロパティで、変更前後の&amp;#8230;書く順番間違えているけど&amp;#8230;サイズが参照できます。なので、これを表示させます。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;SizeChanged イベントが、一度しか発生しません。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;どうも、Silverlight plug-in を呼び出している object 要素に指定した width, height 属性のために、サイズが変化しないようです。ですから、このサイズの指定を絶対値からパーセンテージに変更してみます。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;やはり、一度しか発生しません。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;よく見ると、Page.xaml に Width, Height プロパティを指定しています。これの説明を見ると、"Auto" という値も指定できるということです。なので、"Auto" にしてみます。&lt;/p&gt;
&lt;p class="p"&gt;デザイナからコントロールが消えます。。。&lt;/p&gt;
&lt;p class="p"&gt;ん。。。まぁ、そうかも、しれない、ね。。。とりあえず、これでやってみよう。&lt;/p&gt;
&lt;p class="p"&gt;無事、サイズの変更がわかりました。つまり、ブラウザのサイズ変更に object 要素が追従し、object 要素の変更に Silverlight アプリケーションも追従するようになりました。&lt;/p&gt;
&lt;p class="p"&gt;しかし、これではデザインに支障が出ます。どうしましょう？手っ取り早いのは、オブジェクト生成の時に "Auto" を指定することですが、XAML には "Auto" と記述できますが（シリアル化解除で適切に変換してくれているのだろう）、Double に対して "Auto" という文字列は指定できません。困った。つらつら眺めていると、&lt;q&gt;Height および Width の既定値は、0 ではなく Double.NaN です。&lt;/q&gt;と書いてあります。これにしてみましょう。まず、Page.xaml の Width, Height に適当な数値を設定します。コンストラクタの InitializeComponent() 呼び出しの後、&lt;code&gt;this.Width = double.NaN;&lt;/code&gt; と、&lt;code&gt;this.Height = double.NaN;&lt;/code&gt; を追加します。そして実行。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;うまくいきました。&lt;/p&gt;
&lt;p class="p"&gt;やっぱり、読むならちゃんと読む。斜め読みはいかんね。。。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/163562.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>【業務連絡】XAP ファイルのダウンロード許可を</title><link>http://blogs.wankuma.com/jitta/archive/2008/12/10/163326.aspx</link><pubDate>Wed, 10 Dec 2008 23:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2008/12/10/163326.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/163326.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2008/12/10/163326.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/163326.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/163326.aspx</trackback:ping><description>&lt;P&gt;業務連絡。&lt;/P&gt;
&lt;P&gt;XAP ファイルのダウンロードを許可してくださいませ。&lt;/P&gt;
  &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" &gt;
   &lt;param name="source" value="http://jitta.wankuma.com/Silverlight/DisplayImage/BackgroundMap.xap"/&gt;
   &lt;param name="onerror" value="onSilverlightError" /&gt;
   &lt;param name="background" value="white" /&gt;
   &lt;param name="minRuntimeVersion" value="2.0.31005.0" /&gt;
   &lt;param name="autoUpgrade" value="true" /&gt;
   &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt;
        &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Microsoft Silverlight を取得" style="border-style: none"/&gt;
   &lt;/a&gt;
  &lt;/object&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/163326.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>[Silverlight 奮戦記]入れ替え可能な絵を表示する</title><link>http://blogs.wankuma.com/jitta/archive/2008/12/09/163173.aspx</link><pubDate>Tue, 09 Dec 2008 22:58:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2008/12/09/163173.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/163173.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2008/12/09/163173.aspx#Feedback</comments><slash:comments>265</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/163173.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/163173.aspx</trackback:ping><description>&lt;p class="p"&gt;会社の、新技術キャッチアップ プロジェクトで調べたことをお送りしてきた Silverlight 奮戦記ですが、このたび、成果発表会が行われることになりました。&lt;/p&gt;
&lt;p class="p"&gt;発表時間はごくわずかなので、デモを中心に「こんなことが出来ます」を、Google Web Toolkit、Adobe Integrated Runtime, Silverlight で行うことになったのですが、Silverlight で担当するのが、以前に Windows Application として作成した、「任意の絵をバックグラウンドにして設備管理をする」アプリケーションの、「任意の絵をバックグラウンドにする」の部分となりました！！わーわーわー！！って、喜んでる場合じゃねーよorz&lt;/p&gt;
&lt;p class="p"&gt;Windows Application の場合、ローカルにあるファイルに、ローカル アプリケーションがアクセスすることになります。何も難しいことはありません。&lt;/p&gt;
&lt;p class="p"&gt;Silverlight の場合、ローカルにあるファイルにアクセスできないはずなので、一旦 ASP.NET 等でサーバーにアップロードし、Silverlight アプリケーションがダウンロードして使用する、という形になります。&lt;/p&gt;
&lt;p class="p"&gt;ということは、Silverlight 単体では出来ない、ということです。ASP.NET 他、他の Web Application とのコンビネーションになります。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;まずは、開発環境から。β1の頃に書いたけど、RTM しているので、RTM バージョンということで。&lt;/p&gt;
&lt;p class="p"&gt;Visual Studio 2008 Standard Edition 以上を用意します。それに、&lt;a href="https://www.microsoft.com/downloads/details.aspx?displaylang=ja&amp;FamilyID=fbee1648-7106-44a7-9649-6d9f6d58056e" title="⇒microsoft.com" class="outerLink"&gt;Service Pack 1&lt;/a&gt; をあてます。場合によっては、&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A494B0E0-EB07-4FF1-A21C-A4663E456D9D&amp;displaylang=ja" title="⇒microsoft.com" class="outerLink"&gt;SP1 準備ツール&lt;/a&gt;とかいうものを適用しておく必要があるかもしれません。SP1 をあてたら、インテリセンスが英語になってしまう不具合があるので、&lt;a href="http://support.microsoft.com/default.aspx/kb/957507" title="⇒microsoft.com" class="outerLink"&gt;それを解消するパッチ&lt;/a&gt;をあてます。&lt;/p&gt;
&lt;p class="p"&gt;次、Silverlight 本体。「開発環境なんざいらねぇぜ。テキスト エディタとコンパイラで作ってやるぜ！」という強者は、Visual Studio も要りません。&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8D933343-038F-499C-986C-C3C7E87A60B3&amp;displaylang=ja" title="⇒microsoft.com" class="outerLink"&gt;Silverlight SDK&lt;/a&gt; のみを。普通の方は、&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=C22D6A7B-546F-4407-8EF6-D60C8EE221ED&amp;displaylang=ja" title="⇒microsoft.com" class="outerLink"&gt;Visual Studio 2008 SP1 用 Silverlight Tools&lt;/a&gt; を、ダウンロードします。&lt;/p&gt;
&lt;p class="p"&gt;また、Silverlight2 のドキュメントが、&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bce7684a-507b-4fc6-bc99-6933cd690cab&amp;DisplayLang=ja" title="⇒microsoft.com" class="outerLink"&gt;CHM 形式でダウンロード&lt;/a&gt;できます。一応、Visual Studio の Document Explorer にインテグレートされますが、[F1] 等で参照しようとすると、高確率で WPF のヘルプが出てきます。Silverlight の CHM ファイルを検索すれば、Silverlight のものしか出てきませんので、検索するときには CHM ファイルのほうが便利だと思います。&lt;/p&gt;
&lt;p class="p"&gt;MSDN ライブラリには、&lt;a href="http://msdn.microsoft.com/ja-jp/library/cc838158(vs.95).aspx" title="⇒microsoft.com" class="outerLink"&gt;オンラインのドキュメント&lt;/a&gt;も、用意されています。&lt;/p&gt;
&lt;p class="p"&gt;以上、環境整備終わり。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;それではまず、下準備。これ、とっても重要。&lt;/p&gt;
&lt;p class="p"&gt;上に「Silverlight の場合、ローカルにあるファイルにアクセスできないはず」とか書いたけど、そうなんだっけ？ってことで、「silverlight file upload」で検索すると、CodePlex に &lt;a href="http://www.codeplex.com/SilverlightFileUpld" title="⇒codeplex.com" class="outerLink"&gt;Silverlight File Upload&lt;/a&gt; というコントロールが見つかった。じゃぁ、こいつはどうやってローカル ファイルにアクセスしているんだろう？ってんで MSDN を調べると、&lt;a href="http://msdn.microsoft.com/ja-jp/library/system.windows.controls.openfiledialog(VS.95).aspx" title="⇒microsoft.com" class="outerLink"&gt;OpenFileDialog クラス&lt;/a&gt;が見つかった。これでローカル ファイルにアクセスすることが出来る。&lt;/p&gt;
&lt;p class="p"&gt;では、画像の表示。Windows Application では、Bitmap クラスを使用する。Silverlight ではどうかというと、そもそも System.Drawing 名前空間がない。では、他には？と探す&amp;#8230;のは面倒なので、CHM ファイルで「Bitmap」を検索する。すると、Syste.Windows.Interop 名前空間に、HostingRenderTargetBitmap クラスというのが見つかる。でもこれには&lt;q&gt;アプリケーション コードでこのメンバを使用すると、MethodAccessException 例外がスローされます。&lt;/q&gt;などと書いてあるので、使えない。次、次。「目次」の「ビジュアル デザイン」を開くと、「グラフィクス」という項目がある。ここの中に「イメージング」があるので、これを開く。すると、&lt;q&gt;イメージを描画するには、Image オブジェクトまたは ImageBrush オブジェクトを使用します。&lt;/q&gt;とある。Image クラスの説明には、BitmapImage クラスへのリンクもある。このふたつのクラスについて、調べる。すると、Image クラスはインターネットの向こうからしかイメージを取得できない。BitmapImage クラスも同じ。・・・困った。せっかく、ローカル ファイルへのパスがわかっても、そこから画像オブジェクトを作成することが出来ない。分離ストレージに放り込んで、そこからストリームで画像を作成してやろうかと思っていたのだけれど、メモリ上で画像を扱えないのではこの方法は使えない。&lt;/p&gt;
&lt;p class="p"&gt;困った。。。&lt;/p&gt;
&lt;p class="p"&gt;じゃぁ、あれだ。他のウェブ アプリケーションでサーバーにファイルをアップロードして、そいつを特定の名前で XAP ファイルと同じディレクトリにおいて、Silverlight からはそのファイルを参照すればいい、ってことですね。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;決まったので、次、プロジェクトを作成する。&lt;/p&gt;
&lt;p class="p"&gt;Visual Studio 2008 を起動する。新しいプロジェクトを作成する。とりあえず、ソリューション名を「SilverlightDemo」、プロジェクト名を「BackgroundMap」とする。&lt;/p&gt;
&lt;p class="p"&gt;すると、Silverlight アプリケーションをホストするものをどうするか、聞いてくる。先にも書いたように、どうにかして、サーバーにファイルをアップロードしなければならない。なので、ウェブ アプリケーションを作成することにする。すると、「BackgroundMap.Web」という名前の ASP.NET アプリケーションが作成される。&lt;/p&gt;
&lt;p class="p"&gt;ちょい見すると、「BackgroundMapTestPage.aspx」というページが作られている。この中に、Silverlight をホストするコードが書かれている。しかし、このページにはビハインド コードがない。そこで、ホストするためのコードを Default.aspx にコピーして、デバッグのスタート ページも Default.aspx に変更する。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;コピーした、Silverlight をホストするコード
&amp;lt;%@ Register Assembly="System.Web.Silverlight"
    Namespace="System.Web.UI.SilverlightControls" TagPrefix="asp" %&amp;gt;
（飛ばして）
    &amp;lt;asp:ScriptManager ID="ScriptManager1" runat="server"&amp;gt;
    &amp;lt;/asp:ScriptManager&amp;gt;
    &amp;lt;div style="height: 100%;"&amp;gt;
        &amp;lt;asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/BackgroundMap.xap"
            MinimumVersion="2.0.31005.0" Width="100%" Height="100%" /&amp;gt;
    &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;br&gt;
&lt;p class="p"&gt;さて、サーバーにファイルをアップロードして、どこかに保存しておくコードを作る。&lt;/p&gt;
&lt;p class="p"&gt;FileUpload コントロールと、ポストバックを発生させるための Button コントロール、エラーが発生したときにメッセージを表示する Label コントロールを追加する。&lt;/p&gt;
&lt;p class="p"&gt;FileUpload コントロールの説明を参照すると、HasFile プロパティというのがある。これで、ファイルを指定せずに「更新」ボタンを押したときの判定が出来る。FileBytes プロパティで、アップロードされたファイルのバイト配列が取得できる。このバイト配列を元にメモリ ストリームを作り、メモリ ストリームから Bitmap オブジェクトを作成、そのオブジェクトの Save メソッドで、ファイルに保存してやればいいだろう。と、大まかに流れを組み立てる。&lt;/p&gt;
&lt;p class="p"&gt;では、「画像ファイル」として、「画像ではないファイル」を指定されたらどうするか。Bitmap クラスのコンストラクタを見ると、ArgumentException 例外を発生させるらしい。とりあえず、これだけを受けて、検査例外に読み替えてやればいいだろう。&lt;/p&gt;
&lt;p class="p"&gt;ClientBin へのパスは、どうやって取得する？HttpRequest クラスに、Default.aspx への仮想パス名を格納したプロパティがあるはず。そこから MapPath メソッドで物理パス名に変換、System.IO.Path クラスの GetDirectoryName メソッドでパスに変換して、ClientBin を Combine してやればいいだろう。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;ってことで、コード。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;アップロードされたファイルを保存する
protected void Page_Load(object sender, EventArgs e) {
    Label1.Text = "";
    if (IsPostBack == false) {
        // 初期表示なのでファイルはないはず
        return;
    }
    if (this.FileUpload1.HasFile == false) {
        // ファイルが添付されていないので、以下の処理は必要なし
        return;
    }
    try {
        SaveBitmapFile();
    } catch (ArgumentException) {
        // 指定されたファイルが画像ではないと思われる。
        // 例外は握りつぶす。
        Label1.Text = "指定されたファイルは、画像ではないようです。画像を指定してください。";
    }
}
private void SaveBitmapFile() {
    // アップロードされたファイルをメモリ ストリームに取り込む。
    using (MemoryStream memStrm = new MemoryStream(this.FileUpload1.FileBytes, false)) {
        // メモリ ストリームから、ビットマップに変換する。
        using (Bitmap map = new Bitmap(memStrm)) {
            // App_Data へ、
            string saveFile = System.IO.Path.Combine(
                System.IO.Path.GetDirectoryName(
                this.MapPath(this.Request.FilePath)), @"ClientBin\MapData.png");
            // PNG 形式で保存する。
            map.Save(saveFile, System.Drawing.Imaging.ImageFormat.Png);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br&gt;
&lt;p class="p"&gt;次、Silverlight の方。&lt;/p&gt;
&lt;p class="p"&gt;なんも無し。Grid の中に Image を置くだけ。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;Page.xaml
&amp;lt;Image x:Name="imgBackground" Stretch="Uniform" Source="MapData.png" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;br&gt;
&lt;p class="p"&gt;え？「置いたイメージの大小によって、Image オブジェクトのサイズを変えろ」ですって？&lt;/p&gt;
&lt;p class="p"&gt;余力があれば、チャレンジします。。。&lt;/p&gt;
&lt;p class="p"&gt;おっと、最初に実行する前に、何でもいいので MapData.png って名前の画像ファイルを置いておいてくださいね。でないと、実行時にエラーになりますから。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/163173.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>ちょっと悔しい Silverlight 2 の記事</title><link>http://blogs.wankuma.com/jitta/archive/2008/11/28/162318.aspx</link><pubDate>Fri, 28 Nov 2008 23:06:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2008/11/28/162318.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/162318.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2008/11/28/162318.aspx#Feedback</comments><slash:comments>194</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/162318.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/162318.aspx</trackback:ping><description>&lt;P class=p&gt;&lt;A href="http://blogs.wankuma.com/nakap/archive/2008/11/26/162161.aspx"&gt;Silverlight 2の業務アプリケーションへの活用&lt;/A&gt;経由、&lt;A class=outerLink title=⇒codezine.jp href="http://codezine.jp/article/detail/3338"&gt;第1回 Silverlight 2の紹介&lt;/A&gt;（Silverlight 2の業務アプリケーションへの活用）&lt;/P&gt;&lt;BR&gt;
&lt;P class=p&gt;左の「日記カテゴリ」に、「Silverlight」があります。これは、業務技術先行勉強会で勉強したことをつづっていたわけですが、年末あたりに「成果発表会」？をやるらしく、「まとめろ」という指令が下りました。&lt;/P&gt;
&lt;P class=p&gt;んで、まとめていたのですが、できあがった資料と似たことが書いてある。&lt;/P&gt;&lt;BR&gt;
&lt;P class=p&gt;ちょこっと修正して、わんくまか囲む会で使ってやろうと思っていたので、悔しい、と感じた。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/162318.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>[Silverlight 奮戦記] (5) 折れ線グラフを作る</title><link>http://blogs.wankuma.com/jitta/archive/2008/07/30/151175.aspx</link><pubDate>Wed, 30 Jul 2008 21:05:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2008/07/30/151175.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/151175.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2008/07/30/151175.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/151175.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/151175.aspx</trackback:ping><description>&lt;p class="p"&gt;&lt;a href="http://blogs.wankuma.com/jitta/archive/2008/06/12/143397.aspx"&gt;前回&lt;/a&gt;のあらすじ。XML で記述されているファイルを取り出したらβ2が公開されて、仕様が変わっちゃってて困ったよ。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;なんか、Silverlight でなくてもええやん？？って感じなんだけど、Silverlight なのっ！！&lt;/p&gt;
&lt;p class="p"&gt;前回、XML ファイルからクラス化した情報を、グラフにする。&lt;a href="http://search.live.com/results.aspx?q=silverlight+graph&amp;go=&amp;form=QBHP" title="⇒live.com" class="outerLink"&gt;検索&lt;/a&gt;すればコンポーネントが見つかるのだけど、あえてそれらは使わない。&lt;/p&gt;
&lt;p class="p"&gt;「グラフにする」とは、どういう事か、というところを考える。&lt;/p&gt;
&lt;p class="p"&gt;線を引けば良いわけだけど、じゃぁ、どうやって引くの？データの個数だけ、横に区切りがある。値の最大値にあわせて、縦にもいくつか区切りがある。その区切りにあわせてプロットすればよい。&lt;/p&gt;
&lt;p class="p"&gt;いうのは簡単だぁ！&lt;/p&gt;
&lt;p class="p"&gt;まず、横。グラフを描画する範囲。これを便宜上、「キャンバス」と呼ぶことにします。キャンバスの横幅（ピクセル数）をデータの個数で割れば、データとデータの間に何ピクセル置けばよいか、求まります。&lt;/p&gt;
&lt;p class="p"&gt;同じく縦も、キャンバスの縦幅（ピクセル数）を、データの最大値で割れば、データ1単位あたり、何ピクセル取ればよいか求まります。&lt;/p&gt;
&lt;p class="p"&gt;こうして求めたものを、単位ピクセル数とします。&lt;/p&gt;
&lt;p class="p"&gt;データ配列のｎ番目に横の単位ピクセル数を掛け、値に縦の単位ピクセル数を掛けると、座標が求まります。&lt;/p&gt;
&lt;p class="p"&gt;ところで、「値」ってどれ？&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;とりあえず、「累積稼働時間」としたけど、他の線を重ねたりするかもしれない。そんなわけで、インターフェイスを定義してみた。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
public interface IGraphConvertible
{
    double Value {
        get;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="p"&gt;で、第3回では &lt;code&gt;List&amp;lt;Log&amp;gt;&lt;/code&gt; としたのだけれど、これを、このインターフェイスのリストにしてみる。すると、「インターフェイスは実体化できません」と怒られた。そりゃそうか。で、abstruct クラスを作ってみた。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
public abstract class GraphConvertibleObject : IGraphConvertible
{
    #region IGraphConvertible メンバ

    public abstract double Value {
        get;
    }

    #endregion
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="p"&gt;仮想クラスも実体化できないからなぁ。最初っから virtual なメソッドにすればいいんじゃね？とか思いながら動かすと、動いた。・・・ふ～ん。まぁ、いいや。&lt;/p&gt;
&lt;p class="p"&gt;で、コレクションが変更になる。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
public class GraphConvertibleCollection
    : System.Collections.Generic.List&amp;lt;GraphConvertibleObject&amp;gt;
{

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="p"&gt;当然、Log クラスも変更。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
class Log
{
    public Log() {
        List = new GraphConvertibleCollection();
    }

    [XmlArrayItem(typeof(Warning))]
    public GraphConvertibleCollection List() {
        get;
        set;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="p"&gt;おっと、肝心の Warning クラスを忘れていた。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
class Warning : GraphConvertibleObject
{
    [XmlAttruibute]
    public Int64 TotalRuntime() {
        get;
        set;
    }

    [XmlAttribute]
    public Int64 ErrorCode() {
        get;
        set;
    }

    [XmlText]
    public string LogMessage() {
        get;
        set;
    }

    public override double Value {
        get { return this.TotalRuntime; }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br&gt;
&lt;p class="p"&gt;それでは、グラフ化…というか、折れ線化するところ。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
static public PointCollection NormalSeriesLine(
    GraphConvertibleCollection dataCollection, Size canvasSize, Size divideCount) {
    // 1
    PointCollection points = new PointCollection();
    // 2
    double stepX, stepY;
    if (divideCount.Width == 0) {
        stepX = canvasSize.Width / (double)dataCollection.Count;
    } else {
        stepX = canvasSize.Width / (double)divideCount.Width;
    }
    // 3
    if (divideCount.Height == 0) {
        // 4
        double maxY = 0;
        foreach (IGraphConvertible w in dataCollection) {
            if (w.Value &gt; maxY) {
                maxY = w.Value;
            }
        }
        stepY = canvasSize.Height / (double)maxY;
    } else {
        stepY = canvasSize.Height / (double)divideCount.Height;
    }
    // 5
    points.Add(new Point(0, canvasSize.Height));
    // 6
    int cnt = 0;
    foreach (IGraphConvertible w in dataCollection) {
        long x = Convert.ToInt32(Math.Floor(++cnt * stepX));
        long y = Convert.ToInt32(Math.Floor(w.Value * stepY));
        // 7
        y = Convert.ToInt32(canvasSize.Height - y);
        // 8
        points.Add(new Point(x, y));
    }
    // 9
    return points;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="p"&gt;引数は、dataCollection がデータのリスト。canvasSize は、描画範囲。divideCount は、それを縦横それぞれいくつに分割するか。複数の線を重ねるとき、あるデータ集団は10個あるけど、あるデータ集団は8個しかデータがないかもしれない。そもそも、今回もｎ回の故障履歴を元に、ｎ＋１回目の故障がどれくらいのタイミングで発生するかをグラフで見るものだから、故障回数とグラフの右端は等しいわけではない。そのため、別個に指定できるようにした。&lt;/p&gt;
&lt;p class="p"&gt;1...PolyLine を返さずに PointCollection にしたのは、それぞれの頂点がアニメーションしたらおもしろいと思いません？後で変更できるように、とりあえず、PointCollection にしておく。&lt;/p&gt;
&lt;p class="p"&gt;2...横軸の単位ピクセル数を求める処理。divideCount が0なら、データ数を用いることにする。&lt;/p&gt;
&lt;p class="p"&gt;3...縦軸の単位ピクセル数を求める処理。&lt;/p&gt;
&lt;p class="p"&gt;4...縦軸の場合、「データの数」なんてわかりやすいものはないので、全データをなめて最大値を求める。最小値は0なの。0以下になる場合は自分で考えよう。&lt;/p&gt;
&lt;p class="p"&gt;5...これは、不要かも。(0, 0) の点を追加。&lt;/p&gt;
&lt;p class="p"&gt;6...それぞれのデータを、座標に変換する処理。&lt;/p&gt;
&lt;p class="p"&gt;7...普通、見慣れているグラフは上に行くほど Y の値が大きくなります。しかし、コンピュータの座標系は、左上が (0, 0) です。そのため、Y = 0 の線を軸に、反転させてやる必要があります。その処理。Matrix とかいうのがあって、それを指定すると一点一点反転させなくてもいいのだけれど、字を描いたとき、字まで反転しちゃうので、却下。&lt;/p&gt;
&lt;p class="p"&gt;8...PointCollection に追加して。&lt;/p&gt;
&lt;p class="p"&gt;9...返しておしまい。&lt;/p&gt;
&lt;A href="http://blogs.wankuma.com/images/blogs_wankuma_com/jitta/1078/o_graph.jpg"&gt;&lt;img src="/images/blogs_wankuma_com/jitta/1078/o_graph.jpg" style="width:640px; height:480px;" /&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p class="p"&gt;おまけ&lt;/p&gt;
&lt;p class="p"&gt;多角形をアニメーションさせる方法。元ネタ→&lt;a href="http://forums.msdn.microsoft.com/en-US/wpf/thread/f9d6f99b-7bcb-44b7-9206-22fcd4266c3d/" title="⇒microsoft.com" class="outerLink"&gt;Animating A Polygon?&lt;/a&gt;（英語）&lt;/p&gt;
&lt;p class="p"&gt;PolyLine じゃ無理のようで、パスになりました。パスについては、&lt;a href="http://blogs.wankuma.com/jitta/archive/2008/05/22/138973.aspx"&gt;[Silverlight 奮戦記] (2) 線を描く&lt;/a&gt;の回をご覧ください。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
{
    Storyboard lineStory = new Storyboard();
    foreach (LineSegment line in figure.Segments) {
    PointAnimation anime = CreatePointAnimation(new Point(line.Point.X, canvas1.ActualHeight), line.Point);
        lineStory.Children.Add(anime);
        Storyboard.SetTarget(anime, line);
        Storyboard.SetTargetProperty(anime, new PropertyPath("Point"));
    }
    LayoutRoot.Resources.Add("lineStory", lineStory);
    lineStory.Begin();
}
private PointAnimation CreatePointAnimation(Point from, Point to) {
    PointAnimation anime = new PointAnimation();
    anime.AutoReverse = false;
    anime.BeginTime = new TimeSpan(1);
    anime.From = from;
    anime.To = to;
    anime.RepeatBehavior = new RepeatBehavior(1.0);
    anime.Duration = new Duration(TimeSpan.FromSeconds(3.0));
    return anime;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/151175.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>[Silverlight 奮戦記] (3,4) ファイルを読む β2 対応版  </title><link>http://blogs.wankuma.com/jitta/archive/2008/06/12/143397.aspx</link><pubDate>Thu, 12 Jun 2008 21:39:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2008/06/12/143397.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/143397.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2008/06/12/143397.aspx#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/143397.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/143397.aspx</trackback:ping><description>&lt;p class="p"&gt;Silverlight 2 β2 で、WebHttpRequest や WebClient が、本当に非同期通信になりました。&lt;/p&gt;
&lt;p class="p"&gt;うん。なんかね、「非同期通信にしか対応していないよ」と書いてあったのに、Silverlight 上ではスレッドが1つしかなかったのね。それが、UI Thread と、Communication Thread に分かれたの。&lt;/p&gt;
&lt;p class="p"&gt;はい、何が起こるかわかるよね。Communication Thread で UI Elements を操作しようとすると、例外が発生しますorz...&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;それと、Uri 型だった WebClient.BaseAddress が、ただの文字列になりましたorz...&lt;/p&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p class="p"&gt;そんなわけで、&lt;a href="http://blogs.wankuma.com/jitta/archive/2008/05/30/140447.aspx"&gt;第3回&lt;/a&gt;と、&lt;a href="http://blogs.wankuma.com/jitta/archive/2008/06/06/142126.aspx"&gt;第4回&lt;/a&gt;のコードを書き直し。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;まず、SyncronizationContect を用意します。その名の通り、同期するためのコンテキストです。こいつに、UI Thread を参照させます。そして、通信を受け取った後、UI Thread で通信の内容を転写します。&lt;/p&gt;
&lt;p class="p"&gt;元ネタは、&lt;a href="http://scorbs.com/2008/04/05/silverlight-http-networking-stack-part-1-site-of-origin-communication/" title="→scorbs.com" class="outerLink"&gt;開発者さんのブログ&lt;/a&gt;。&lt;/p&gt;
&lt;p class="p"&gt;では、書き直したコード。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
// 同期コンテキスト
&lt;span style="font-weight:bold;"&gt;SynchronizationContext syncContext;&lt;/span&gt;

public Page() {
    InitializeComponent();
    this.Loaded += new RoutedEventHandler(Page_Loaded);
}

void Page_Loaded(object sender, RoutedEventArgs e) {
    // 現在のコンテキストを参照させておく
    &lt;span style="font-weight:bold;"&gt;syncContext = SynchronizationContext.Current;&lt;/span&gt;
    WebClient client = new WebClient();
    // ただの文字列なので、Uri に変換
    &lt;span style="font-weight:bold;"&gt;Uri assmblUri = new Uri(client.BaseAddress);&lt;/span&gt;
    // β1ではパスだったのに、.xap に変わっているので、パスに変換
    &lt;span style="font-weight:bold;"&gt;string path = System.IO.Path.GetDirectoryName(assmblUri.LocalPath).Replace('\\', '/');&lt;/span&gt;
    // スキーマやホストをつなげて URI にできる文字列にする
    &lt;span style="font-weight:bold;"&gt;string uri = String.Format("{0}://{1}{2}/warnigLog.xml"
        , assmblUri.Scheme, assmblUri.Host, path, assmblUri.AbsolutePath);&lt;/span&gt;
    textBox1.Text = uri;
    Uri logUri = new Uri(uri);
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(logUri);
    request.BeginGetResponse(new AsyncCallback(GetWarningLog), request);
}

private void GetWarningLog(IAsyncResult result) {
    HttpWebRequest request = (HttpWebRequest)result.AsyncState;
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
    // 同期コンテキストから呼び出す
    &lt;span style="font-weight:bold;"&gt;syncContext.Post(SynchronizedResponse, response);&lt;/span&gt;
}

private void SynchronizedResponse(object state) {
    &lt;span style="font-weight:bold;"&gt;HttpWebResponse response = state as HttpWebResponse;&lt;/span&gt;
    Stream stream = response.GetResponseStream();
    try {
        XmlSerializer serializer = new XmlSerializer(typeof(WarningLog));
        log = (WarningLog)serializer.Deserialize(stream);

        textBox1.Text += ":resieved\n";
        foreach (Warning w in log.WarningList) {
            textBox1.Text += (w.ToString() + "\n");
        }
    } catch (Exception ex) {
        textBox1.Text = ex.ToString();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/143397.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>Silverlight 2 Beta 2</title><link>http://blogs.wankuma.com/jitta/archive/2008/06/10/142697.aspx</link><pubDate>Tue, 10 Jun 2008 21:19:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2008/06/10/142697.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/142697.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2008/06/10/142697.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/142697.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/142697.aspx</trackback:ping><description>&lt;p class="p"&gt;Silverlight 2 Beta 2 SDK が公開されています。→&lt;a href="http://blogs.wankuma.com/hirom/archive/2008/06/08/142223.aspx"&gt;Silverlight 2 SDKのBeta2が公開されています。&lt;/a&gt;（ひろえむの日々是勉強）&lt;/p&gt;
&lt;p class="p"&gt;インストールするときは、アドオンや SDK の Beta1 をアンインストールしてから、インストーラを起動します。&lt;/p&gt;
&lt;p class="p"&gt;これだけなら、ひろえむさんがリンクしてくださっているのでブログを書いたりしません。SDK Beta 2 では、&lt;span style="font-size:150%; color:green;"&gt;ドキュメントが日本語化されています！&lt;/span&gt;&lt;span class="comment"&gt;beta 1 相当だけど&lt;/span&gt;。&lt;/p&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p class="p"&gt;Visual Studio ヘルプへのインテグレートの仕方は、&lt;a href="http://blogs.wankuma.com/jitta/archive/2008/05/19/138421.aspx"&gt;こちら！&lt;/a&gt;。&lt;/p&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p class="p"&gt;あ...ば、ば、ば、ばっかヤローーー！！Beta 2 に Beta 1 のドキュメントつけてどーする！！&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:200%; color:red;"&gt;追加になったクラスのドキュメントが、全く見あたりません。&lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;一部のクラスに、メンバの型が変更になっているものがあります。ドキュメントは、古い型のままです。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;日本語化の努力は買う。賞賛する。でもね、それでもね。。。これは、ちょっと、どうよ？？&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/142697.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>[Silverlight 奮戦記] (4) XML シリアル化とシリアル化解除</title><link>http://blogs.wankuma.com/jitta/archive/2008/06/06/142126.aspx</link><pubDate>Fri, 06 Jun 2008 23:37:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2008/06/06/142126.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/142126.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2008/06/06/142126.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/142126.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/142126.aspx</trackback:ping><description>&lt;p class="p"&gt;&lt;a href="http://blogs.wankuma.com/jitta/archive/2008/05/30/140447.aspx"&gt;前回&lt;/a&gt;のあらすじ。HTTP ベース サービスを利用して、XML ファイルを持ってくる、と決めた。&lt;/p&gt;
&lt;p class="p"&gt;今回の目標。読み込む対象を決定する。&lt;/p&gt;
&lt;br&gt;
&lt;p class="P"&gt;どんなデータが必要か、or あればよいかを考える。&lt;/p&gt;
&lt;p class="p"&gt;まず、故障回数。まぁ、ログの件数を数えれば件数はできるから、いっか。累積稼働時間。これは必要。エラーコード。まぁ、必要。エラー内容を分類するかもしれないし。それと、メッセージ内容。要らないかもしれないけど、ログだし。&lt;/p&gt;
&lt;p class="p"&gt;とりあえず、そんなところで。XML だし、後から追加できるから。&lt;/p&gt;
&lt;p class="p"&gt;ということで、ログ1件のクラスは、こんな感じ。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
class Warning
{
    [XmlAttruibute]
    public Int64 TotalRuntime() {
        get;
        set;
    }

    [XmlAttribute]
    public Int64 ErrorCode() {
        get;
        set;
    }

    [XmlText]
    public string LogMessage() {
        get;
        set;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;
&amp;lt;Warning TotalRuntime="Int64" ErrorCode="Int64"&amp;gt;LogMessage&amp;lt;/Warning&amp;gt;
&lt;/pre&gt;
&lt;p class="p"&gt;そして、ログ ファイルは、この1件のログがたくさん集まっているわけだから、XML が、こんな感じ。&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;
&amp;lt;Log&amp;gt;
    &amp;lt;List&amp;gt;
        &amp;lt;Warning TotalRuntime="Int64" ErrorCode="Int64"&amp;gt;LogMessage&amp;lt;/Warning&amp;gt;
    &amp;lt;/List&amp;gt;
&amp;lt;/Log&amp;gt;
&lt;/pre&gt;
&lt;p class="p"&gt;このファイルのためのクラスは、次のようになる。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
class LogList : List&amp;lt;Log&amp;gt;
{
    // シリアル化のために必要
    // 空クラス
}

class Log
{
    public Log() {
        List = new LogList();
    }

    [XmlArrayItem(typeof(Warning))]
    public LogList List() {
        get;
        set;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="p"&gt;あ、あっさりできた...&lt;/p&gt;
&lt;p class="p"&gt;ここの注意点は、「[Xmlほにゃらら]」という、属性ですかね。XML の、要素なのか、属性なのか、内容なのか。それから、どんな型の配列なのか。その辺がきっちり押さえてあれば、よろしいかと。&lt;/p&gt;
&lt;p class="p"&gt;それと、クラスに「[Serialize]」属性をつけなくて良いみたい。1.x の頃は必要だったけど、2.0 以降のどこかで不要になった？それとも、Silverlight では不要？&lt;/p&gt;
&lt;p class="p"&gt;あれ？そうすると、LogList クラスも要らないかな？2.0 では、&lt;a href="http://blogs.wankuma.com/jitta/archive/2005/10/16/18721.aspx"&gt;ジェネリックをシリアル化できなかった&lt;/a&gt;のだけど。。。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;クラスの設計ができたので、それに沿った XML ファイルを作る。そして、配置する。作るのが面倒なときは、このクラスに適当なデータを放り込んで、シリアル化して作る。先にシリアル化しておくと、本当に望むとおりになっているか、確認もできる。&lt;/p&gt;
&lt;p class="p"&gt;次、GetWarningLog メソッドの実装。&lt;/p&gt;
&lt;p class="p"&gt;サンプル コードに、ストリームを取り出すところまで載っている。なので、真似すればいい。最後に、出力のところだけ、こっちに都合が良いように変えればいい、と。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
#using System.Net;
#using System.IO;
#using System.Xml.Serialization;

private void GetWarningLog(IAsyncResult result) {
    HttpWebRequest request = (HttpWebRequest)result.AsyncState;
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
    Stream stream = response.GetResponseStream();
    try {
        XmlSerializer serializer = new XmlSerializer(typeof(WarningLog));
        WarningLog log = (WarningLog)serializer.Deserialize(stream);
        textBox1.Text += ":resieved\n";
        foreach (Warning w in log.WarningList) {
            textBox1.Text += (w.ToString() + "\n");
        }
    } catch (Exception ex) {
        textBox1.Text = ex.ToString();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br&gt;
&lt;p class="p"&gt;実行してみる。ロードが終わって、ワンテンポ遅れて、テキスト ボックスに XML ファイルの内容らしきもの（ToString メソッドの実装に依存）が表示されれば OK。例外が発生した場合は、例外の内容がテキスト ボックスに書かれる。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;ん～？Silverlight っちゅう感じがしないのはなぜ？&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/142126.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>Silverlight ってば</title><link>http://blogs.wankuma.com/jitta/archive/2008/06/06/142122.aspx</link><pubDate>Fri, 06 Jun 2008 23:35:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2008/06/06/142122.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/142122.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2008/06/06/142122.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/142122.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/142122.aspx</trackback:ping><description>&lt;p class="p"&gt;サーバに、xap ファイルへの関連づけがいるらしい。→&lt;a href="http://gihyo.jp/dev/serial/01/silverlight/0005?page=2" title="→gihyo.jp" class="outerLink"&gt;第5回　Silverlight 2でHello world&lt;/a&gt;（gihyo.jp）&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;というわけで、管理人さん、よろしくお願いしま～す→&lt;a href="http://blogs.wankuma.com/jitta/archive/2008/05/26/139489.aspx"&gt;真っ白なワケ&lt;/a&gt;&lt;/p&gt;
&lt;p class="p"&gt;zip ファイルも置きました。Silverlight 2 がインストールされていれば、ローカルでも表示できます。&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/142122.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>