Использовать локальные изображения в элементе управления 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); 
Interesting Posts

Интерфейсы со статическими полями в java для совместного использования ‘констант’

VBA Short-Circuit `And` Alternatives

Сделайте снимок экрана всей веб-страницы в Opera

Заставка экрана при загрузке URL-адреса в веб-виде в приложении для Android

Как удалить и удалить .kext в Mac OS X?

У кого-нибудь есть опыт работы с батареями для ноутбуков?

Конструкторы и наследование по умолчанию в Java

Почему DisplayFormat DataFormatString не работает?

Многострочная линейная диаграмма с подсказкой для мыши

Должен ли я привязываться к ICollectionView или ObservableCollection

Как рассчитать объем 3D-сетчатого объекта, поверхность которого состоит из треугольников

Как сделать очень старое приложение на 64-битной Windows?

Почему нет подключенного диска, доступного под расширенным приглашением cmd, но находится под обычной подсказкой cmd?

Анатомия «утечки памяти»

Почему автобоксирование делает некоторые вызовы неоднозначными на Java?

Давайте будем гением компьютера.