Как использовать gif-анимированное изображение в WP 7

Я видел это сообщение: Показать GIF в приложении WP7 с Silverlight

Но в моем случае? для анимации я использую всплывающее окно. Поэтому, когда приложение запускается, оно отображает всплывающее окно в течение 5 секунд. В этом всплывающем окне я хочу показать некоторый .gif-образ, но он не работает.

Вот код, который я реализую:

    public partial class AnimatedSplashScreen : UserControl
    {
        protected Uri ImageSource
        {
            get;
            set;
        }
        public AnimatedSplashScreen()
        {
            InitializeComponent();
           ImageSource =
                new Uri(
                    "http://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Sunflower_as_GIF.gif/200px-Sunflower_as_GIF.gif",
                    UriKind.Absolute);
            ImageTools.IO.Decoders.AddDecoder<GifDecoder>();

        }

И код xaml:

<UserControl.Resources>

        <imagetools:ImageConverter x:Key="ImageConverter" />
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot"
          Width="480"
          Height="800"
          Background="White">
        <imagetools:AnimatedImage Source="{Binding ImageSource, Converter={StaticResource ImageConverter}}"  />

Но в результате он не работает, он показывает пустой фон.

Обновлено: ImageTools.IO.Decoders.AddDecoder();           ImageSource = новый Uri ( " http://a3.twimg.com/profile_images/1136683647/hisoka_normal.gif", UriKind.Absolute);  Он все еще не работает.

Ответ 1

Наконец-то работаем... Разговор о событиях, сговорившихся против вас... Сначала вам нужно исправить все это!

(обратите внимание, что существует следующая проблема: только анимированные первые 2 кадра, но это относится к другому вопросу):

Часть 6 (сейчас сонливость)

Наконец, относительные URL-адреса изображений, начинающиеся с "/" , не поддерживаются ImageTools.Controls.ImageConverter, поэтому вам нужно использовать относительный URL-адрес без ведущего "/" . Я обнаружил, что после устранения каждой другой проблемы я получал неподдерживаемое исключение из пути.

        ImageTools.IO.Decoders.AddDecoder<GifDecoder>();
        InitializeComponent();
        this.ImageSource = new Uri("layer1.gif", UriKind.Relative);
        this.DataContext = this;

Часть 5

Вам нужно установить привязку DataContext где-нибудь.

Вы не подключаете страницу XAML DataContext к коду за объектом. Я не мог понять, где вы это сделали. Очень простой/быстрый способ - установить this.DataContext = this; в конструкторе страницы.

Часть 4

Вы можете привязываться только к общедоступным свойствам!

Ваше свойство ImageSource в настоящее время защищено. Измените его на Public

    public Uri ImageSource
    {
        get;
        set;
    }

Часть 3

Я также отмечаю, что ваше свойство ImageSource не является свойством типа INotifyPropertyChange. Поэтому настройка его после InitializeComponent не будет работать.

Попробуйте сделать это круглым путем (или измените его, чтобы использовать свойство notify):

public AnimatedSplashScreen()
{
   ImageSource =
        new Uri(
            "/200px-Sunflower_as_GIF.gif",
            UriKind.Relative);
    ImageTools.IO.Decoders.AddDecoder<GifDecoder>();
    InitializeComponent();
}

Часть 2 (фактически не поддерживается ImageTools.Controls.ImageConverter)

Файл кросс-домена, по-видимому, был только одной проблемой. На основе комментариев вам также необходимо сохранить свои изображения на своем собственном веб-сайте и ссылаться на них в соответствующем формате URI.

Если вы поместите свои файлы в папку под изображениями под ClientBin, вы используете этот формат:

"/images/imagename.jpg"

Это лучший вариант, поскольку изображения также используют кеширование браузера!

В вашем примере это будет так:

    ImageSource =
                new Uri(
                    "/images/200px-Sunflower_as_GIF.gif",
                    UriKind.Relative);
            ImageTools.IO.Decoders.AddDecoder<GifDecoder>();

и поместите файл примера в папку вашего клиентского bin под изображениями.

Если вы не используете ведущий "/" , Silverlight предполагает, что файлы являются ресурсами в текущем модуле, например,

"images/imagename.jpg"

Часть 1

Это на самом деле проблема с авторским правом, чтобы люди не могли глубоко привязывать файлы с других сайтов без разрешения.

Сайт Wikimedia.org не имеет файлов доступа к перекрестному домену, например:

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

Это означает, что Silverlight не разрешит доступ к файлам на этих сайтах, так как это хороший гражданин Интернета. Попробуйте разместить файлы на своем собственном сайте (где находится приложение Silverlight), тогда ему не понадобится любой файл доступа к перекрестному домену.

Боковое примечание. Если вам когда-либо понадобится файл с перекрестными доменами на веб-сайте, для использования Silverlight используйте crossdomainpolicy.xml, поскольку другой не так полезен (предназначен для использования более старой вспышки)