Silverlight 4の革新の詳細な概要

シルバーライト4 この記事では、Silverlight 4の革新について、次のような詳細な説明を提供します。

ほとんどの場合、コード例と画像が提供されています。





開発ツール



Visual Studio 2010は、完全なSilverlightビジュアルインターフェイスデザイナーを導入しました。 これで、Silverlightバージョン3および4のアプリケーションのインターフェイスを編集できます。データバインディングサポートが実装されました。

シルバーライト4

さらに、VS2010 for WCF RIA Servicesは、データソースとしてDomainSourceクラスをサポートする高度なエディターを導入しました。

マルチターゲットのおかげで、VS2010では、Silverlightバージョン3および4でアプリケーションを同時に開発できます。

ビデオ: Visual Studio 2010でのRIAサービスのサポート



Silverlightからの印刷(Printing API)



最も要求された技術革新の1つは、クライアント側の印刷サポートです。 Silverlight 4はそのようなAPIを導入しました。

コード例:

private void PrintAll_Click( object sender, RoutedEventArgs e)

{

// PrintDocument

PrintDocument docToPrint = new PrintDocument();



//

docToPrint.DocumentName = "Entire Screen Sample" ;



//

docToPrint.StartPrint += (s, args) =>

{

ActivityDisplay.IsActive = true ;

};



//

docToPrint.PrintPage += (s, args) =>

{

args.PageVisual = this .StackOfStuff;

};



//

docToPrint.EndPrint += (s, args) =>

{

ActivityDisplay.IsActive = false ;

};



//

docToPrint.Print();

}







上記のように、プリコードとポストコードを追加して印刷の準備をすることができます。 PrintPageは、開発者が印刷するインターフェイス要素を設定できるフィールドです。 ビジュアルツリーの既存の要素、または仮想メモリで作成されたものを使用できます。

ビデオとコード例: 印刷API



右クリック処理



アプリケーションでコンテキストメニューを作成する必要がありますか? 現在、MouseLeftButtonUp / Dowイベントに加えて、MouseRightButtonUp / Downイベントが表示されています。 これにより、開発者は、マウスボタンをクリックしたときに、ゲーム内の制御コマンドであるか、コンテキストメニューを開くかにかかわらず、コードの実行を構成できます。

コード例:

public partial class MainPage : UserControl

{

public MainPage()

{

InitializeComponent();



//

ChangingRectangle.MouseRightButtonDown += new MouseButtonEventHandler(RectangleContextDown);

ChangingRectangle.MouseRightButtonUp += new MouseButtonEventHandler(RectangleContextUp);

}



void RectangleContextUp( object sender, MouseButtonEventArgs e)

{

//

ColorChangeContextMenu contextMenu = new ColorChangeContextMenu(ChangingRectangle);

contextMenu.Show(e.GetPosition(LayoutRoot));

}



void RectangleContextDown( object sender, MouseButtonEventArgs e)

{

// -

e.Handled = true ;

}

}







このソースコードは、Silverlight 4アプリケーションにコンテキストメニューを追加するためのショートカットです。結果は次のようになります。

シルバーライト4

ビデオとコード例: 右クリック処理



ウェブカメラとマイクへのアクセス



ウェブカメラやマイクへのアクセスが必要ですか? Silverlight 4では、これを行うことができます。 開発者は数行のコードで、ビデオまたはオーディオキャプチャデバイスにアクセスする許可をユーザーに求めることができます。

許可をリクエストするためのサンプルコード:

//

if (CaptureDeviceConfiguration.AllowedDeviceAccess || CaptureDeviceConfiguration.RequestDeviceAccess())

{

_captureSource.Start();

}







画像をキャプチャするためのサンプルコード:

if (_captureSource != null )

{

_captureSource.Stop(); //



//

_captureSource.VideoCaptureDevice = (VideoCaptureDevice)VideoSources.SelectedItem;

_captureSource.AudioCaptureDevice = (AudioCaptureDevice)AudioSources.SelectedItem;



//

VideoBrush vidBrush = new VideoBrush();

vidBrush.SetSource(_captureSource);

WebcamCapture.Fill = vidBrush; // =)



//

if (CaptureDeviceConfiguration.AllowedDeviceAccess || CaptureDeviceConfiguration.RequestDeviceAccess())

{

_captureSource.Start();

}

}







シンプルなウェブカメラ写真APIも追加されました。

private void TakeSnapshot_Click( object sender, RoutedEventArgs e)

{

if (_captureSource != null )

{

//

_captureSource.AsyncCaptureImage((snapImage) =>

{

_images.Add(snapImage);

});

}

}







この詳細については、Sergey Pugachev WizardBoxによるHabrの記事Silverlight 4でのWebカメラとマイクの操作 」をご覧ください

ビデオとコードの例: ウェブカメラとマイクのサポート



マウスホイールのサポート



Silverlightの以前のバージョンでは、DeepZoomなどの補助クラスを使用して、マウスホイールイベントを処理する必要がありました。 4番目のバージョンでは、対応するAPIが追加されました。

コード例:

//

myRectangle.MouseWheel += new MouseWheelEventHandler(RectangleZoom);



void RectangleZoom( object sender, MouseWheelEventArgs e)

{

// -

}







ご覧のとおり、特定の要素のマウスホイールイベント処理を簡単にバインドできます。

ビデオとコード例: マウスホイールイベントの処理



RichTextArea要素



ユーザーが要求する革新の1つは、編集可能なリッチテキスト(太字、斜体、さまざまなサイズ、色などのサポート)を備えたインターフェイス要素でした。 RichTextAreaを使用して、このような要素を取得できるようになりました。

RichTextAreaは次のようになります。

シルバーライト4

ビデオとコード例: RichTextArea要素



クリップボードAPI



Silverlight 4はシンプルなクリップボードAPIを追加しました。 Silverlightがサポートするすべてのプラットフォームで動作します。

コード例:

Clipboard.SetText( " " );





このコードは、Silverlightアプリケーションからオペレーティングシステムのクリップボードにテキストを書き込む機能を示しています。

GetText()メソッドはバッファに含まれるテキストを返し、ContainsText()はテキストが現在バッファに保存されているかどうかを判断します。

ビデオとコード例: クリップボードへのアクセス

Clipboard.SetText( " " );







WebBrowser要素を使用してHTMLドキュメントを表示する



Webで作業する場合、ほとんどの場合、HTMLドキュメントを処理する必要があります。 Silverlight 4では、アプリケーションインターフェイスにHTMLドキュメントを表示できるようになりました。 これを行うには、文字列変数とURLによるリモートページの両方から読み込むことができるHTMLコードであるWebBrowser要素を使用します。

サンプルコード(XAML):

< WebBrowser x:Name ="MyBrowserControl" Width ="800" Height ="600" />





コード例(C#):

MyBrowserControl.NavigateToString( "<div style='color:red;width:100;height:100'><b>Example HTML</b></div>" );





以下に、SilverlightアプリケーションがFlash上​​のYouTubeプレーヤーでHTMLドキュメントを表示する画像の例を示します。

シルバーライト4

または、HtmlBrushブラシを使用して、カスタムインターフェイス要素を入力できます。

ビデオとコード例: SilverlightでHTMLドキュメントを表示する



信頼できるアプリケーション



ブラウザー外のSilverlightアプリケーションには、昇格されたアクセス許可が必要な場合があります。 4番目のバージョンでは、昇格した権利を要求することが可能になりました。 これは、VSのアプリケーションプロパティで実行できます。

シルバーライト4

この結果、ブラウザ外アプリケーションをインストールするときに警告が表示されます。

シルバーライト4

次の革新は、信頼できるアプリケーションの可能性を示しています。



クライアントコンピューター上のローカルファイルにアクセスする



ユーザーのコンピューターからのデータの読み取り/書き込みには、OpenFileDialog(読み取り用)やSaveFileDialog(書き込み用)などのメカニズムが通常使用されます。 Silverlight 4では、マイフォルダー内のユーザーのローカルファイルへの直接アクセスが導入されました。 これらは「マイドキュメント」、「マイビデオ」、「マイミュージック」などです。 MacOS Xでは、これらは「/ユーザー/ユーザー名/ビデオ」のようなディレクトリです。

ファイルパスを取得するには、Environment名前空間を使用する必要があります。

コード例:

private void EnumerateFiles( object sender, RoutedEventArgs e)

{

//

List < string > videosInFolder = new List < string >();



// Directory API,

// SpecialFolder API, " "

var videos = Directory .EnumerateFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyVideos));



//

foreach ( var item in videos)

{

videosInFolder.Add(item);

}



//

VideoFileListing.ItemsSource = videosInFolder;

}







拡張権利が必要です(信頼できるアプリケーション)。

ビデオとコード例: ローカルファイルへのアクセス



COMの相互運用性



アプリケーションでは、COMインターフェースのみを提供する周辺機器と対話する必要がありますか? または、Officeアプリケーションで作業する必要がありますか? Silverlight 4のComAutomationFactory APIを使用して、COMオブジェクトを作成および操作できます。

サンプルコード(Excelとの相互作用):

// Excel

dynamic excel = ComAutomationFactory.CreateObject( "Excel.Application" );



excel.Visible = true ; //



//

dynamic workbook = excel.workbooks;

workbook.Add();



dynamic sheet = excel.ActiveSheet; //







拡張権利が必要です(信頼できるアプリケーション)。

ビデオとコード例: 信頼できるアプリケーションでのCOMオブジェクトへのアクセス



ポップアップ通知API(通知API)

便利なユーザー通知メカニズムが必要ですか? Silverlight 4には、トレイの横にポップアップ通知を表示する機能があります。

SilverlightのNotificationWindowを使用すると、アプリケーションのシンプルまたはカスタムの通知メカニズムを取得できます。

コード例:

private void CustomNotificationButton_Click( object sender, RoutedEventArgs e)

{

//

NotificationWindow notify = new NotificationWindow();

notify.Height = 74;

notify.Width = 329;



//

CustomNotification custom = new CustomNotification();

custom.Header = "Sample Header" ;

custom.Text = "Hey this is a better looking notification!" ;

custom.Width = notify.Width;

custom.Height = notify.Height;



//

notify.Content = custom;



//

notify.Show(4000);

}







NotificationWindow要素は次のようになります。

シルバーライト4

通知は、ブラウザ外のアプリケーションでのみ使用できます。

これについては、Habré「 Silverlight 4:NotificationWindowjejeの記事でロシア語で詳しく読むことができます。

ビデオとコード例: 通知ウィンドウAPI



Webリクエスト認証



Silverlight 4では、Silverlight 3で導入されたClientHttpスタックを使用してNetworkCredential情報を送信できます。たとえば、ユーザー名/パスワードをサービスに転送するには、次のようにします。

// NetworkCredential passing is available in ClientHttp networking stack

WebRequest.RegisterPrefix( "http://" , System.Net.Browser.WebRequestCreator.ClientHttp);



WebClient myService = new WebClient();

myService.Credentials = new NetworkCredential( "someusername" , "somepassword" );

myService.UseDefaultCredentials = false ; // -

myService.DownloadStringCompleted += new DownloadStringCompletedEventHandler(OnResultCompleted);

myService.DownloadStringAsync( new Uri (http: //somewebsite.com/authenticatedservice));







ビデオとコード例: Web要求認証



クロスドメインの変更



Silverlight 4アプリケーションが昇格特権モード(信頼されたアプリケーション)で動作する場合、別のドメインのWebサービスを操作するために、clientaccesspolicy.xmlまたはcrossdomain.xmlファイルを使用する必要はなくなりました。

ビデオとコード例: 信頼できるアプリケーションでのクロスドメインリクエスト



フルスクリーンモードでのフルキーボードアクセス



Silverlightアプリケーションがフルスクリーンで実行されている場合(IsFullScreen =” true”)、限られたキーボード入力のみが利用可能です。 フルスクリーンモードのSilverlight 4上の信頼できるアプリケーションでは、TextBoxなどの要素のキーボード入力が完全にサポートされています。

拡張権利が必要です(信頼できるアプリケーション)。



テキストのトリミング



TextBlock要素にはTextTrimmingと呼ばれる新しいプロパティがあり、WordElipse値に設定できます。 これを行うと、要素の幅に収まらないテキストは切り捨てられ、表示されていない部分の代わりに省略記号が表示されます。

コード例:

< TextBlock HorizontalAlignment ="Left" VerticalAlignment ="Top"

Text ="The quick brown fox jumped over the tall white fence"

TextTrimming ="WordEllipsis" Width ="120" />







次のようになります。

シルバーライト4



右から左へのスペルサポート



アプリケーションで右から左へのスペル(RTL)サポートが必要な場合、新しい要素属性FlowDirectionを使用できます。

コード例:

< StackPanel HorizontalAlignment ="Center" VerticalAlignment ="Center" x:Name ="ControlSamples" >

< TextBlock FlowDirection ="LeftToRight" Foreground ="White" Text ="BiDi and RTL Sample" FontSize ="20" Margin ="20" />

< RichTextArea TextWrapping ="Wrap" Width ="600" Height ="150" ></ RichTextArea >

< TextBlock FontSize ="24" Foreground ="White" Text ="قفز الثعلب البني السريع فوق الكلب الكسول." />

< ListBox >

< ListBox.Items >

< ListBoxItem Content ="قفز الثعلب البني السريع فوق الكلب الكسول." />

< ListBoxItem Content ="Option 1" />

< ListBoxItem Content ="Option 2" />

< ListBoxItem Content ="Option 3" />

< ListBoxItem Content ="Option 4" />

</ ListBox.Items >

</ ListBox >

</ StackPanel >







これは継承されたプロパティです。

ビデオとコード例: 双方向および右から左へのライティングのサポート



Silverlightをドラッグアンドドロップのコンテナーとして使用する



ファイルをアプリケーションウィンドウにドラッグアンドドロップして読み込むと便利な場合があります。 このスクリプトを使用するには、任意のインターフェイス要素にAllowDrop属性を設定します。

コード例:

public MainPage()

{

InitializeComponent();

Loaded += new RoutedEventHandler(MainPage_Loaded);



//

InstallButton.Drop += new DragEventHandler(InstallButton_Drop);

InstallButton.DragOver += new DragEventHandler(InstallButton_DragOver);

InstallButton.DragEnter += new DragEventHandler(InstallButton_DragEnter);

InstallButton.DragLeave += new DragEventHandler(InstallButton_DragLeave);

}





void InstallButton_Drop( object sender, DragEventArgs e)

{

IDataObject foo = e.Data; //

}







サーバーにファイルをアップロードするときなどに使用すると非常に便利です。

ビデオとコード例: Silverlightをドラッグアンドドロップのコンテナーとして使用する



Silverlight 4の他の資料やリソースへのリンクは、Habrの記事にあります。Silverlight 4ベータ版は既に利用可能です。 中身は? »ミハイル・チェルノモルディコフが混ざり合った

ブログエントリ: Silverlight 4の新機能



All Articles