Silverlight 3でローカルのファイルに限定的にアクセスできるようになりました。
ただし、ファイルを開くダイアログとか経由じゃないと駄目だったような気がします。
Silverlight 4では、ブラウザにドロップされたファイルを開いたりすることが出来るようになってます。これは、HTMLベースのアプリケーションに比べて、直感的にファイルをアップロードするようなインターフェースが作りやすくなるかもしれません。
ということで、早速試してみました。
Dropを許可する
ドロップを許可するコントロールのAllowDropをTrueに設定します。ここでは、LayoutRootのGridに、その設定をしました。
<Grid x:Name="LayoutRoot" Background="White" AllowDrop="True"> </Grid>
イベントを作成する
次にDropイベントを作ります。先ほどのGridにDropイベントを登録します。
<Grid x:Name="LayoutRoot" Background="White" AllowDrop="True" Drop="LayoutRoot_Drop"> </Grid>
コードビハインドで、普通の.NET製アプリと同じ要領でドロップで受け取ったファイルを取得できるみたいです。
private void LayoutRoot_Drop(object sender, DragEventArgs e) { // ファイルが1つドロップされること前提 // ファイルを取得して var file= ((FileInfo[])e.Data.GetData(DataFormats.FileDrop))[0]; var sb = new StringBuilder(); // ファイル名を取得して sb.AppendLine(file.Name); // FullNameはセキュリティで怒られた // 一行目を読み込む(日本語はUTF-8じゃないとだめなのかな?) using (var r = file.OpenText()) { sb.AppendLine(r.ReadLine()); } // 結果の表示 MessageBox.Show(sb.ToString()); }