ナビゲーション イベントをインターセプトし、自分で処理する必要があります。
次のコード サンプルは、正しい方向を示しているはずです。(あなたはそれを磨きたいと思うでしょう、私はテストmp3ファイルを検索したときにGoogleに出てきたランダムなmp3サイトで動作できることを示すためにそれをまとめました)
using Microsoft.Phone.Controls;
using System;
using System.IO;
using System.IO.IsolatedStorage;
using System.Net;
using System.Threading.Tasks;
using System.Windows;
namespace PhoneApp2
{
public partial class MainPage
{
public MainPage()
{
InitializeComponent();
MyWebBrowser.Navigate(new Uri("http://robtowns.com/music/"));
}
private async void MyWebBrowser_OnNavigating(object sender, NavigatingEventArgs e)
{
if (!e.Uri.AbsolutePath.EndsWith(".mp3")) return; //Find a more reliable way to detect mp3 files
e.Cancel = true; // Cancel the browser control navigation, and take over from here
MessageBox.Show("Now downloading an mp3 file");
var fileWebStream = await GetStream(e.Uri);
using(var isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
var filePath = "downloadedfile.mp3";
var localFile = isolatedStorage.CreateFile(filePath);
await fileWebStream.CopyToAsync(localFile.AsOutputStream().AsStreamForWrite());
fileWebStream.Close();
MessageBox.Show("File saved as 'downloadedfile.mp3'");
}
}
public static Task<Stream> GetStream(Uri url)
{
var tcs = new TaskCompletionSource<Stream>();
var wc = new WebClient();
wc.OpenReadCompleted += (s, e) =>
{
if (e.Error != null) tcs.TrySetException(e.Error);
else if (e.Cancelled) tcs.TrySetCanceled();
else tcs.TrySetResult(e.Result);
};
wc.OpenReadAsync(url);
return tcs.Task;
}
}
}