Живая плитка — UWP (Windows 10) — URL-адрес в исходном изображении не работает

Я пытаюсь поместить URL-адрес источника изображения в XML моего шаблона LiveTyle, но некоторые URL-адреса не работают должным образом. Я протестировал визуализатор уведомлений приложений от Microsoft и не работает, однако вставил ссылку в браузере, изображение возвращается. Есть идеи, в чем проблема?

Ссылка не работает в шаблоне:

Кодировать: http%3A%2F%2Fproxycache.app.iptv.telecom.pt%3A8080%2FMeoHandler%2FImageProxy.ashx%3Fwidth%3D200%26url%3D1%2F5% 2F55046d06-98e0-4aa3-be7d-f6996152b8ad_c_anatomia-16x9.jpg

Расшифровка: http://myimages.com/today/hello?width=200&url=9_c_xpto-16x9.jpg

оба не работают :(

Извлечь шаблон:

string localImageURL = "ms-appx:///Assets/MyImage70x70.png"; 

XmlDocument _myXML = new XmlDocument(); 

string PeekSlide=
                      @"<tile>
                       <visual>
                      <binding template=""TileMedium"" branding=""name"">
                       <image src=""{0}""  placement=""peek"" hint-overlay=""20""/>
                      <image  src=""{1}"" placement=""background""/>
                      </binding>
                      </binding>
                      </visual>
                      </tile>";

    var _myTile = string.Format(PeekSlide, localImageURL, myWebUrl);
    _myXML.LoadXml(_myTile);

Заранее спасибо!


person fipcurren88    schedule 31.03.2016    source источник


Ответы (2)


Это связано с тем, что ваш ImageURL содержит &, который имеет особое значение в XML. Таким образом, XML не может анализировать URL-адрес вашего изображения. Замените & на &amp; вместо. Подробности см. в разделе Ссылки на объекты . После замены URL-адрес вашего изображения должен быть

 <image src="http://myimages.com/today/hello?width=200&amp;url=9_c_xpto-16x9.jpg"/>
person Sunteen Wu    schedule 01.04.2016
comment
Спасибо @Sunteen. Работают отлично после изменения & до . Один вопрос: в С# у меня есть System.Security.SecurityElement.Escape(url), но в моем BackgroundTask я не получаю к нему доступ. Я пробую: url= url.Replace(&, ).Replace(‹, ).Replace(›, ).Replace(\, ).Replace(', ); но этот путь очень скучный. Есть ли способ сделать это с помощью собственных методов? как первый я пишу? Спасибо - person fipcurren88; 01.04.2016
comment
Попробуйте WebUtility.UrlEncode (msdn.microsoft.com/en -нас/библиотека/) - person Thomas LEBRUN; 03.04.2016
comment
@ fipcurren88, похоже, для этого нет API. Хотя он есть, основная логика должна быть заменена. Заменить - хороший способ, я думаю. Но оберните его в метод и вызывайте метод каждый раз, когда вы хотите его использовать. - person Sunteen Wu; 05.04.2016
comment
@Sunteen, привет, спасибо за ответ, я пытаюсь var url= Windows.Foundation.Uri.escapeComponent(url); но безуспешно: Ошибка над Uri: «Uri» недоступен для его уровня защиты. Не удается получить доступ к частному классу "Uri" здесь. Спасибо - person fipcurren88; 05.04.2016
comment
@fipcurren88 Также я нашел документ, на который вы можете ссылаться [Как найти и заменить специальные символы в файле XML с помощью Visual C# .NET](support.microsoft.com/en-us/kb/316063). Дополнительно, если мой ответ может вам помочь, не могли бы вы пометить его как ответ? - person Sunteen Wu; 05.04.2016

Содержимое поля '_myTile' будет представлять собой XML с путем к изображению в ресурсах, а не из Интернета.

Почему бы вам не попробовать это:

string localImageURL = "http://proxycache.app.iptv.telecom.pt:8080/MeoHandler/ImageProxy.ashx?width=200&url=1/5/55046d06-98e0-4aa3-be7d-f6996152b8ad_c_anatomia-16x9.jpg"; 

XmlDocument _myXML = new XmlDocument(); 

string PeekSlide=
                      @"<tile>
                       <visual>
                      <binding template=""TileMedium"" branding=""name"">
                       <image src=""{0}""  placement=""peek"" hint-overlay=""20""/>
                      <image  src=""{1}"" placement=""background""/>
                      </binding>
                      </binding>
                      </visual>
                      </tile>";

var _myTile = string.Format(PeekSlide, localImageURL);
_myXML.LoadXml(_myTile);

ХТХ,

Томас

person Thomas LEBRUN    schedule 01.04.2016