Archive for the ‘Silverlight’ Category

#めとべや 東京#1でお話した「データバインディング徹底攻略」のスライドをアップロードしました。こちら

今回は突然デモマシンがダウンするというトラブルでお恥ずかしいところをお見せしましたが、会場のみなさんがあたたかく見守っていただく中、なんとか無事最後までお話できました。

親睦会も含めてとても楽しい時間を過ごすことができました。ありがとうございました!

また是非お声掛けくださいねー>@tanaka_733 さん、@hr_saoさん

 

あとからツイートを確認したところ、少し気になるツイートをされている方がおられたのでマークアップ拡張の自作について少しフォローアップしておきます。

 

マークアップ拡張の自作について

今回は仕組みを理解していただくためにマークアップ拡張の作成方法についてご説明しましたが、通常の開発ではよほどのことがない限りはマークアップ拡張の自作は行いません。

マークアップ拡張の作成というのは、つまりは共通ロジックなどのインフラの作成ということになりますが、通常の開発でインフラをバグの原因として疑うことはどうしても後回しとなりがちです。

つまり、ある種のロジックの隠ぺいとなっており、可読性を落としてトラブルシューティングをしずらくする原因となります。

多くの場合はデータバインディングで解決可能かと思われますので、まずはデータバインディングを利用することをお奨めします。

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

来る7/6土曜日にめとべや東京#1で登壇します。こちら

20130702002346

開催情報を引用させていただきますと・・・

開催日時

2013年7月6日(土) 13:00

開催場所

会場: KDDI ウェブコミュニケーションズ 6F CloudCore セミナールーム

住所: 東京都千代田区麹町三丁目6番地 住友不動産麹町ビル3号館

URL

http://metrostyledev.net/

ハッシュタグ

#めとべや

こちらは前身となるコミュニティのころから人気コミュニティでしたが、名前を変えてもその人気は衰えずという感じですね。

そして、私自身は東京在住なのに声がかかるのがいつもなぜか大阪でした・・・というかタイミングがよかったんですけどね(^^;

さて、今回は「データバインディング徹底攻略」ということで、ちょっととっつきづらいテーマですががんばってお話させていただこうかと思っています。

という訳でよろしければご参加ください!

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

6/22(土)に.NETラボ勉強会さんでお話させていただきます。こちら

20130617094430

開催概要を引用させていただくと・・・

開催概要

■日時:2013年6月22日(土曜日) 13:30-18:00 (開場:13:00、退出:18:00)

■会場:会場:日本マイクロソフト 品川本社 (SGT)Room B
http://www.microsoft.com/ja-jp/mscorp/branch/sgt.aspx

■会費:500円(学生無料、懇親会は別途、ゲストスピーカーは懇親会無料)
※会費は運営費とゲスト懇親会費に充てさせてもらいます。

 

という感じのようです。

私は一番最後の枠で「WPF・SilverlightのアニメーションからWindowsストアアプリのアニメーションへ」というセッションを70分間お話させていただく予定です。

以前、Windowsデベロッパーカンファレンスで30分でやった内容がベースなのですが、以前は駆け足だったので、もう少し入り口から楽しめるように少しだけ掘り下げてお話させていただければと思います。

最新の情報やお申込みはこちらのリンク先のほうへどうぞ!

せっかくの機会なので楽しんでやりましょう!

お気軽にご参加くださいねー!(^^)

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

Extensible Application Markup Language (XAML)の技術資料が公開されています。

Continue reading ‘Extensible Application Markup Language (XAML)の技術資料が公開されています。’ »

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

Windows Phone SDK update for 7.8が公開されています。

Continue reading ‘Windows Phone SDK update for 7.8が公開されています。’ »

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

「.NET」開発者のためのSilverlight入門を執筆しました。

すみません、宣伝です(^^;

本書はタイトル通りのSilverlightの入門書になります。

某所で行っていたセミナーの内容をベースになかなか時間の関係でお話できなかった点やゆっくり説明できなかった部分なども書籍の特徴を生かして執筆いたしました。

デモプログラムもインターネット経由でそのままダウンロードしていただけます。

結構時間がかかってしまったのですが、Silverlight開発者だけではなく、XAMLを使った開発を行う方にも役に立てるように必要な知識をやさしく理解していただけるようがんばって執筆しました。

これから始めようという方は最初から順に読んでいただければ必要な知識を得られるように工夫しました。

そして、既にXAMLを習得されている方にも、確認したい点を理解しやすいように極力各章で独立して説明するように心がけています。

ただ、書籍の帯は編集の方が書いて下さったようなのですが、ちょっと先走っているようですが、ここはご愛敬ということでひとつご容赦のほどを・・・。(^^;

8月25日に工学社から発売になりますので是非お手にとってご覧下さい。

助けると思って(^^;

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

ということでこちらの記事に関連して簡単に利用方法など。

まず、Codeplexの[Download]をクリックするとClick Onceによるツールのインストールが行われます。

20111227102410

インストールが行われますと、スタートメニューからWindows Phone Power Toolsの起動が行えます。

20111227102555

ツールの実行にはWindows Phone EmulatorもしくはアンロックされたWindows Phoneが必要になります。
実機に対してアクセスを行う場合は事前にWindows Phone SDKにあるWindows Phone Developer Registrationなどによってアンロックを行って下さい。(要App Hubアカウント)

20111227102839

そして,Zuneを起動して実機を接続後、こちらのツールを起動しますと接続先の確認を行うダイアログが表示されます。 こちらでDeviceもしくはEmulatorを選択してください。

20111227103015

選択したら「CONNECT」ボタンで接続を行います。正しく接続されていない場合(Zuneが起動していなかったり、ロック画面のままになっているような場合ですね)はエラーメッセージが表示されます。

起動すると3つのメニューが表示されます。

Install|Update

 20111227103243

Xapファイルのインストールや更新が行えます。表示にもあるように障害が発生しても特に何も表示されない場合がありますので、モジュール・端末の確認は自身で行う必要があります。

そして対象のXAPがエミュレーター・端末に存在しない場合は新規にInstall、存在する場合は再インストールが行われます。

apps

20111227103605

既にインストールされているアプリケーションの一覧から起動やKILL、アンインストールなどが行えます。

file browser

20111227103955

こちらが分離ストレージブラウザーですね。中に格納されているファイルの読み書きおよびディレクトリの作成やファイルなどの削除等が行えます。

上記以外にも下記の[Windows Device PHONE]と記載のある部分をクリックすると

20111227104205

先ほどのダイアログに戻りますが、[DEVICE INFORMATION]となっている部分をクリックすると

20111227104330

上記のように接続中のデバイスの情報を確認することができます。

というワケで簡単でしたがWindows Phone Power Toolsの利用方法でした。

お粗末さまでしたー。

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

Windows Phone Power Toolsが公開されています。こちら

Windows Phone Power ToolsはWindows Phone上にあるアプリケーションのインストール・更新・削除や分離ストレージに格納されたデータなどにTreeView構造のブラウザーを利用してExplorer風にアクセスすることができるツールですね。

リンク先にも記載がありますように、通常のWindows Phone SDKだとXAPのインストールとCUI形式のIsolatedStoragExplorerを利用してのアクセスという形になりますが、こちらのツールを使用するとXAPの更新やGUIを使ったIsolatedStorageに対するブラウジング、XAPのアンインストール、デバイス情報の取得やアプリケーションの起動やKillなどが行えます!

まま、実際問題これくらいの操作がGUIでできてくれると便利ですねー。

というワケでメモ。

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

こちらのエントリーはSilverlight Advent Calendar 2011の24日分の参加エントリーです。

書いていて気がつきましたが、このエントリーってクリスマスイブのエントリーなんですね(^^;

といっても、それほど特別な内容ではなくて恐縮なんですが、今回はせっかくですのでSilverlight 5に追加されたカスタムのマークアップ拡張を作成するというシナリオについてご紹介したいと思います。

まずは概要のおさらいから

マークアップ拡張とは

ご存じのとおり、SilverlightではXAMLを使ってUIを作成し、それ以外の処理はC#, VisualBasicを使ってアプリケーションを構築します。

このXAMLはご存じのとおり、XMLベースのマークアップでオブジェクトのインスタンスの宣言を行い、併せてそのオブジェクトのプロパティやイベントを設定する宣言型プログラミング言語という位置づけでした。

そのプロパティ・イベントの設定には「属性構文」「プロパティ要素構文」「コレクション構文」などがあって、設定するオブジェクトの種類などによってこれらを使い分ける必要がありました。

中でも、「属性構文」・「プロパティ要素構文」はプロパティやイベント設定の礎となる重要な構文です。

「属性構文」はXMLの属性の形でプロパティやイベントの設定が行える代わりに、その中に設定できるオブジェクトが限定されており、「文字列」もしくは「直接変換可能な値」となっていました。

20111222175611

「直接変換可能な値」とはintやdoubleなどのプリミティブ型(正確にはネイティブテキスト構文と呼ばれる構文で定義されたデータ型)や列挙型、または型コンバーターによる変換が可能な値などがこれらに当たりますが、つまりは上記以外のプロパティ設定を行う場合は必然的に「プロパティ要素構文」で記述する必要があります。

対して「プロパティ要素構文」はオブジェクトとなるXML要素のコンテント領域に[オブジェクト名].[プロパティ名]と命名された要素を内包することで柔軟なオブジェクトの設定が可能です。

20111222175850

コンテンツ領域に任意のオブジェクトタグを宣言することでプロパティに対して任意のオブジェクトを設定することが可能です。

その代り、開始タグ・終了タグのマークアップとなるため、表現が冗長となりがちで、ステップ数もかさむことから可読性の意味ではあまり優れているとは言えません。

このような理由から、多くは可能な限り属性構文で設定を行い、属性構文で設定が難しいものに関してはプロパティ要素構文を利用するという形で宣言を行います。

しかし、利用頻度の高いオブジェクトなどは、プロパティ要素構文で宣言するとステップ数が増えてしまいますので、一部のオブジェクトは属性構文で宣言できるような方法が用意されていました。

それがマークアップ拡張になります。

マークアップ拡張の利用方法

マークアップ拡張は属性構文で中かっこで指定が可能です。

20111222183451

マークアップ拡張として利用可能なクラスを中かっこ{}の中に指定し、スペースを開けてコンストラクタやプロパティの指定が行えます。 これらは,をトークンとすることで複数のパラメーターが指定可能です。

パラメーターの中に等号「=」が含まれるものがプロパティへの設定、含まれないものがコンストラクタへの設定となります。

Silverlightにはあらかじめいくつかのマークアップ拡張として利用可能なクラスが定義されています。

  • Binding:データバインディングで利用するクラス
  • StaticResource:リソースディクショナリからの参照を指定するクラス
  • TemplateBinding:コントロールテンプレート内から元となる親オブジェクトのプロパティとの通信を行うためのクラス
  • RelativeSource:バインディングやテンプレートバインディングなどで相対位置のソースを指定するためのクラス

また、XAML内の機能で利用できるマークアップ拡張としてプロパティにNull値を指定する{x:Null}があります。

Silverlight 4まで上記の定義済のマークアップ拡張を利用するのみだったのですが、Silverlight 5からは任意のマークアップ拡張を作成するというシナリオが追加されています。

マークアップ拡張は自身でカスタムのマークアップ拡張の作成方法を知ることで、上記のようなパラメーターの指定が、実際のマークアップ拡張に対してどのように作用しているのかが理解しやすくなります。

それでは早速、その方法を確認してマークアップ拡張の挙動を確認してみましょう。

カスタムのマークアップ拡張の作成方法

マークアップ拡張はMarkupExtensionクラスの派生クラスのオブジェクトになります。そのため必然的にMarkupExtensionを継承する必要があります。

MarkupExtensionはSystem.Windows.Markup名前空間にあるクラスです。

この中のProvideValueというメソッドを継承することでマークアップ拡張は作成が可能です。

using System;
using System.Windows.Markup;

namespace SLAdv2011_Day24_MarkupExtension
{
    public class MerryChristmasExtension : MarkupExtension
    {
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return "Merry X'mas to XAMLDeveloper";
        }
    }
}

以上のコードをXAMLから呼び出す場合は、以下のようになります。

<UserControl x:Class="SLAdv2011_Day24_MarkupExtension.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:local="clr-namespace:SLAdv2011_Day24_MarkupExtension"

mc:Ignorable="d"

d:DesignHeight="300" d:DesignWidth="400">

<Grid x:Name="LayoutRoot" Background="DarkBlue">

<TextBlock Text="{local:MerryChristmas}"

HorizontalAlignment="Center"

VerticalAlignment="Center"

FontSize="40">

<TextBlock.Foreground>

<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

<GradientStop Color="#FFE0FF00" Offset="0.012" />

<GradientStop Color="#FFFF8A00" Offset="1" />

</LinearGradientBrush>

</TextBlock.Foreground>

</TextBlock>

</Grid>

</UserControl>

xmlnsにlocalの接頭辞で名前空間の宣言を行い、TextBlockコントロールのTextプロパティに対してマークアップ拡張を指定しました。

上記のように、クラス名に「~Extension」と定義することが一般的で、このExtensionに関してはXAMLでは省略が可能です。

ただし、Silverlightでは「~Extension」と名前のついていないマークアップ拡張も存在しており、、「~Extension」とすること自体は必須ではありません。

次にプロパティを定義してみます。

using System;
using System.Windows.Markup;

namespace SLAdv2011_Day24_MarkupExtension
{
    public class MerryChristmasExtension : MarkupExtension
    {
        public string To { get; set; }

        public MerryChristmasExtension()
        {
            To = "XAMLDeveloper";
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return "Merry X'mas to " + To;
        }
    }
}

 

今回はToというstring型のプロパティを1つ定義しました。

そして、XAMLではTextBlockコントロールのTextプロパティを以下のように定義してみます。

<TextBlock Text="{local:MerryChristmas To=SilverlightDeveloper}"

HorizontalAlignment="Center"

VerticalAlignment="Center"

FontSize="40">

<TextBlock.Foreground>

<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

<GradientStop Color="#FFE0FF00" Offset="0.012" />
<
GradientStop Color="#FFFF8A00" Offset="1" />

</LinearGradientBrush>

</TextBlock.Foreground>

</TextBlock>

すると実行結果は以下のような形となります。

MarkupExtensionImage

上記のように、マークアップ拡張そのものはとても簡単に作成できることから、利用頻度の高いユーティリティクラスなどをマークアップ拡張として定義することですっきりとしたXAMLにすることが可能です。

従来WPFでは行えたことがSilverlightでもようやく行えるようになったことで、利用方法もすっきり理解できるようになったのではないかと思います。

データの表現などはBindingでかなりの表現が行えるので、むやみにマークアップ拡張を作成することはおすすめできませんが、共通的に利用するようなユーティリティクラスを定義することで効率的な開発を行うことが可能になります。

今回のサンプルコードはこちらになります。

そんなワケでTipsというよりはどちらかというと基礎的な内容ばかりで大変恐縮です(^^;

それでは僭越ながら私のSilverlight Advent Calendar 2011のエントリーは以上になります。

みなさん、よいクリスマスをお過ごしください!

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

こちらのエントリーはSilverlight Advent Calendar 2011の23日分の参加エントリーです。

さて、僭越ながら3日連続でエントリーを予定している2日目で、今回のテーマは「ブラウザー外実行」に関する内容です。

ということでまずはブラウザー外実行の概要から。

ブラウザー外実行概要

一般的にSilverlightのマネージAPIで開発されたアプリケーションはご存じのとおり、Silverlightランタイム上で動作する、拡張子がxapとなっているパッケージファイルに内包されたアプリケーションです。

このxapファイルは通常HTMLやaspxなどのWebページ上にobjectタグとparamタグを使って埋め込みます。

そして、SilverlightランタイムがインストールされたクライアントマシンからWebブラウザーで、埋め込まれたページにアクセスすることでパッケージが読み込まれてランタイム上で実行されます。

20111221170905

通常は上記のようなプロセスでアプリケーションが実行されているワケです。

そこで、ブラウザーが受け持っている、Silverlightアプリの実行に必要なさまざまな機能群を切り出して、これを独立した実行ファイルにしました。

20111221171237

その実行ファイルとランタイムの組み合わせでSilverlightアプリケーションを実行を可能にした機能が本日の本題「ブラウザー外実行」になります。

実行にブラウザーを利用しないので、アプリケーションが必要としないのであれば、ネットワーク接続がないクライアント環境でも手軽にSilverlightアプリケーションを実行できる機能になります。

ただし、インストールの際にはブラウザーを使ってアプリケーションを読み出す必要がありますので、ブラウザーやネットワーク接続そのものが必要ないワケではありません。

しかし、実装そのものは大きな変更をしなくても、パッケージに含まれるマニフェストファイルの変更だけでブラウザー外実行にすることが可能なため、お手軽にクライアントアプリケーション化することができるところが特徴です。

ブラウザー外実行の設定

ブラウザー外実行は先ほどもお話した通り、xapファイルに含まれるマニフェストファイルを変更するだけで利用可能になります。 しかし、マニフェストファイルを直接メンテナンスしなくても、主要な設定項目はVisual Studio 2010のプロパティからGUI操作で簡単に設定することが可能ですので、こちらで設定することをおすすめします。

Visual Studio 2010のソリューションエクスプローラーから「Silverlightプロジェクトを右クリック→プロパティ」、もしくは「Silverlightプロジェクト内の”Properties”をダブルクリック」を行います。

20111221172004

Silverlightプロジェクトのプロパティが表示されますので、Silverlightタブにある「アプリケーションのブラウザー外実行を有効にする」をチェックするとアプリケーションがブラウザー外実行することが可能になります。

 

チェックをオンにするとすぐ下にある「ブラウザー外実行の設定」ボタンをクリックするとブラウザー外実行の主要な設定項目が格納されています。

中でも「インストールメニューの表示」にチェックが入っていないとコードによるインストール手段を用意していない限りブラウザー外実行を行うことができないので注意して下さい。

20111221172623 

ブラウザー外実行のアプリのインストール

ブラウザー外実行のアプリケーションのインストールは大きく2通りあります。

1つは「Silverlightの構成メニュー」からインストールする方法、もう1つは「コードによるインストール方法」になります。

「Silverlightの構成メニューからインストールする」の場合は、先ほどの「インストールメニューの表示」にチェックしておきます。

あとは以下のように実行中のSilverlightアプリケーション対して右クリックすることでインストールメニューが表示されます。

OutOfBrowser1

この「~をインストールします。」のメニューをクリックすることで次のようなダイアログが表示されます。

20111221174018

こちらのダイアログはインストールしたアプリケーションへのショートカットの配置先の指定となります。

スタートメニューもしくはデスクトップ上にショートカットが配置されるので、そこからアプリケーションを起動することが可能です。

ただし、上記のチェックがオンじゃなかったり、アプリケーション内で右クリックのイベントをハンドリングしている場合は構成メニューを表示させることができませんので、この方法ではインストールできません。

もう1つインストール方法は「コードからインストール」する方法になります。

コードからインストールする場合はApplicationクラスのInstallメソッドを実行するのみです。

ですので、Application.Install()でインストールが可能です。

あとはインストールしたショートカットをクリックすることがアプリケーションを起動できます。

ブラウザー外実行のアプリのアンインストール

ブラウザー外実行のアプリケーションのアンインストールも2通りあり、一つは「構成メニューからアンインストールする方法」、もう1つは「コントロールパネルからアンインストールする方法」です。

「構成メニューからのアンインストールする方法」はインストール時と同様にブラウザー外実行で実行されているSilverlightアプリケーション上で右クリックすることでアンインストールが可能です。

sloob2

ただし、インストール時と同様、アプリケーションが右クリックをハンドリングしているとこれらは表示されません。

その場合はコントロールパネルからのアンインストールを行うこととなります。

ブラウザー外実行にはまだまだ説明したいことはあるのですが、本題とは外れますのでこれくらいにしたいと思います。

ブラウザー外実行のUpdate

前段階の説明が長くてすみません(^^;

Silverlightアプリケーションは通常のWebアプリケーションと同様、サーバー上にあるアプリケーションを置き換えてしまえば新しいモジュールの配布を行うことが可能ですが、ブラウザー外実行となるとモジュールそのものがクライアント側に配置されるため、アプリケーションを自動的に更新することができません

しかし、Silverlightにはそのような時のためにアプリケーションの更新を検知する仕組みが用意されています。

Application.CheckAndDownloadUpdateAsync()

上記メソッドはApplicationクラスのメンバーですので、UIから取得する場合はApplication.Currentプロパティから実行可能です。

上記メソッドはブラウザー外実行でインストールされているアプリケーションのバージョンをチェック時、自身のモジュールのバージョンアップ版を見つけたらそのxapファイルをダウンロードして、更新します。

そのため、これらのチェックにはネットワーク通信が発生しますので、必然的にネットワーク接続がされている必要があります。

そして、ご存じのとおりSilverlightのすべての通信は非同期で実現されており、こちらも例外ではありません。そのため、それらの更新の可否を取得するために下記のイベントのイベントハンドラを指定する必要があります。

Application.CheckAndDownloadUpdateCompleted

これらをまとめると以下のようなコードになります。

(2011-12-23 22:30 コードにバグがあったので修正しました)

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    var app = Application.Current;
    //判定および更新結果の取得完了時イベント
    app.CheckAndDownloadUpdateCompleted += app_CheckAndDownloadUpdateCompleted;
    //判定・更新
    app.CheckAndDownloadUpdateAsync();
}

 

パッケージの更新可否の確認

そして、このイベントハンドラのイベント引数を通じて、更新の可否を取得する必要があります。

更新の可否はイベント引数からUpdateAvailableというbool型のプロパティを通じて取得できます。

こちらがtrueの場合、アップデートのあったパッケージのダウンロードが成功したことを表しています。

こちらがfalseの場合はUpdateが存在しない、もしくはアップデートに失敗したということになります。

では、このアップデートの失敗はどのような場合に発生するかというと、以下のようになります。

  • Silverlightランタイムのバージョンが異なる
  • 配置されているモジュールが完全信頼モードで動作するアプリケーションなどの管理者権限を必要とするもの

上記のようなケースだと、同じくイベント引数のErrorというException型のプロパティにエラーの内容が格納されます。

Silverlightランタイムのバージョンが異なる場合はPlatformNotSupportedExceptionのインスタンスが格納されます。

既に配置されている完全信頼モードのパッケージと同じ証明書がつけられている場合は、上記のように問題なく更新できますが、証明書がなかったり、異なる証明書がついている場合は承認を必要としますのでSecurityExceptionのインスタンスが格納されます。

このあたりをまとめると以下のようなコードになります。

void app_CheckAndDownloadUpdateCompleted(object sender, CheckAndDownloadUpdateCompletedEventArgs e)
{
    if(e.UpdateAvailable)
    {
        MessageBox.Show("アップデート完了。 アプリケーションを再起動してください。");
        return;
    }
    else if(e.Error != null && e.Error is PlatformNotSupportedException)
    {
        MessageBox.Show("アップデートは存在していますが、Silverlightランタイムのバージョンが異なります。");
        return;
    }
    else if(e.Error != null && e.Error is SecurityException)
    {
        MessageBox.Show("完全信頼モードのアプリケーションで、認証が必要です");
        return;
    }
    MessageBox.Show("アップデートは存在しません。");
}

というワケで実行するとこんな感じで表示されるとおもいます。

20111222112142

アップデートを検知するために固定のWebサイトが必要だったので、今回のサンプルプログラムはWebプロジェクト入りになります。

というワケで23日のエントリーは以上になります。

今日の内容はMicrosoft Innovation Academyの「Silverlightプログラミング入門 前編」で実施しているセミナーの内容からのピックアップになりますので、よろしければ本編のセミナーもどうぞ(^^;

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]