Использовать локальные изображения в элементе управления Webbrowser

Я использую элемент управления Webbrowser в своем приложении Wp7, но я не могу помещать изображения, которые находятся в каталоге приложения, в веб-браузере.

Я поместил некоторые изображения в папку в том же каталоге, что и файлы .cs и .xaml. Теперь я пытаюсь поместить их в элемент управления webbrowser, но я не могу заставить это работать.

  

Очевидно, что эти два не работают, я предполагаю, что это должно быть примерно так:

  

«SilverlightApplication» и «component» должны быть заменены чем-то другим, но я не знаю, что 🙁

Вам нужно будет сохранить изображения в изолированном хранилище, а затем отобразить изображения оттуда. Я собрал образец, который вы можете скачать из следующего местоположения:

http://www.smartmobiledevice.co.uk/projects/webbrowserimagesample.zip

Это основано на статье MSDN. Как: Показать статический веб-контент с помощью элемента управления WebBrowser для Windows Phone .

В Windows Phone 8, где доступны некоторые classы WinRT, можно получить путь к файловой системе изолированного хранилища приложения. Таким образом, абсолютный URL-адрес файла в IsoStorage будет:

 string URL = "file://" + Windows.Storage.ApplicationData.Current.LocalFolder.Path + "\\folder\\filename.png"; 

Элемент управления WebBrowser принимает такие URL-адреса в NavigateToString() ‘d HTML в порядке. Или вы можете назначить IsoStorage как базу и использовать относительные URL-адреса на всем протяжении. isostore: URL-адреса не работают, я пробовал. Также ms-appx://local/ .

Для полноты вы можете так же получить путь файловой системы к ресурсам вашего приложения. Это будет Windows.ApplicationModel.Package.Current.InstalledLocation.Path .

ну, вы можете использовать динамические изображения, объединив приведенный выше пример примера приложения для примера, обновите массив динамически,

 string[] files = { "readme.htm", "desert.jpg", "sample.jpg" }; 

и прежде чем писать в изолированный, вы можете удалить существующий

  private void SaveFilesToIsoStore() { //These files must match what is included in the application package, //or BinaryStream.Dispose below will throw an exception. string[] files = { "readme.htm", "desert.jpg", "sample.jpg" }; IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication(); if(isoStore.FileExists(files[0])) { isoStore.DeleteFile(files[0]); } foreach (string f in files) { StreamResourceInfo sr = Application.GetResourceStream(new Uri(f, UriKind.Relative)); using (BinaryReader br = new BinaryReader(sr.Stream)) { byte[] data = br.ReadBytes((int)sr.Stream.Length); SaveToIsoStore(f, data); } } } private void SaveToIsoStore(string fileName, byte[] data) { string strBaseDir = string.Empty; string delimStr = "/"; char[] delimiter = delimStr.ToCharArray(); string[] dirsPath = fileName.Split(delimiter); //Get the IsoStore. IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication(); //Re-create the directory structure. for (int i = 0; i < dirsPath.Length - 1; i++) { strBaseDir = System.IO.Path.Combine(strBaseDir, dirsPath[i]); isoStore.CreateDirectory(strBaseDir); } //Remove the existing file. if (isoStore.FileExists(fileName)) { isoStore.DeleteFile(fileName); } //Write the file. using (BinaryWriter bw = new BinaryWriter(isoStore.CreateFile(fileName))) { bw.Write(data); bw.Close(); } } 

Это очень старый stream, но я придумал решение, так как мы только что обновили приложение WP7.

Секрет состоит в том, чтобы сначала преобразовать изображение в базовое представление 64, поэтому начните с этого кода:

  private string GetBase64(string f) { string ret = ""; { StreamResourceInfo sr = Application.GetResourceStream(new Uri(f, UriKind.Relative)); using (BinaryReader br = new BinaryReader(sr.Stream)) { byte[] data = br.ReadBytes((int)sr.Stream.Length); ret = System.Convert.ToBase64String(data); } } return ret; } 

Теперь, когда вы хотите вставить изображение в код (мои – gif), используйте это

 StringBuilder sb = ... // a string builder holding your webpage String b64 = GetBase64("assets/images/filename.gif"); sb.AppendFormat(@"", b64); 
Давайте будем гением компьютера.