リスト10は、メニューが選択された際に実行されるイベントハンドラです。
今回は、どのメニューをクリックした場合でも同じイベントハンドラを呼ぶようにし、イベントハンドラ内部で、Tagプロパティの値を元に四角形に設定する色を変更しています。
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
var item = (MenuItem)sender;
switch ((string)item.Tag)
{
case "Red":
dropTarget.Fill = new SolidColorBrush(Colors.Red);
break;
case "Blue":
dropTarget.Fill = new SolidColorBrush(Colors.Blue);
break;
case "Green":
dropTarget.Fill = new SolidColorBrush(Colors.Green);
break;
default:
break;
}
}
実行すると、図4のように色を変更するコンテキストメニューが表示されることを確認できます。
クリップボード
Silverlight 3までのクリップボードを使ったプログラミングは、印刷と同じようにHTML-DOMを利用したJavascriptとの連携で実現されていました。Silverlight 4からは、Unicodeのテキスト限定ですが、印刷などと同じようにSilverlightのみで操作できます。
クリップボードアクセスの機能を追加します(リスト11:Printing.xaml.cs)。
/// <summary>
/// テキストファイルの情報を読み込む
/// </summary>
private static ListBoxItem LoadText(FileInfo dropFile)
{
using (var readStream = dropFile.OpenText())
{
var item = new ListBoxItem
{
Height = 100,
Width = 100,
Content = new TextBlock
{
Text = readStream.ReadToEnd(),
},
};
// 左ボタンを押したタイミングでテキストをクリップボードに格納する。
item.MouseLeftButtonUp += (_s, _e) =>
{
var content = (TextBlock)item.Content;
Clipboard.SetText(content.Text);
MessageBox.Show(string.Format("クリップボードの中身:{0}", Clipboard.GetText()));
};
return item;
}
}
この例では、ドロップしたファイルがテキストの場合、マウスの左ボタンがクリックしたタイミングでテキスト情報をクリップボードに格納し、クリップボードの情報をすぐにメッセージボックスで表示します。
Silverlightでは、セキュリティー面も考慮し、通常、Silverlightでクリップボードを利用する場合、GetTextメソッドやSetTextメソッドを呼び出したタイミングで、図5のダイアログボックスが表示されます。

[いいえ]をクリックしてクリップボードのアクセスを拒否すると、SecurityExceptionの例外が発生します。また、[回答を保存する]チェックボックスをONにした場合、次回以降、そのサイトのクリップボードアクセスでは、図5の承認ダイアログは表示されません。この設定は、Silverlightのプロパティ画面のアクセス許可タブで確認できます。

まとめ
今回はSilverlight 4で強化されたスタイルの設定方法や、印刷やクリップボードといった、アプリケーションを作成する上で、ちょっとうれしい新機能に注目して解説しました。
次回は、Silverlightで標準的な開発手法であるMVVMについて焦点を当てていきます。
