Как использовать GIF-анимированное изображение в WP 7 - PullRequest
1 голос
/ 12 марта 2012

Я видел этот пост: Отображение 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 = new Uri ("http://a3.twimg.com/profile_images/1136683647/hisoka_normal.gif", UriKind.Absolute); он все еще не работает

1 Ответ

6 голосов
/ 12 марта 2012

Наконец-то работает ... Поговорите о заговорах против вас ... Вам нужно исправить все эти вещи в первую очередь!

(обратите внимание, что существует следующая проблема с анимированием только первых 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 где-нибудь.

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

Part 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>();

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

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

"images/imagename.jpg"

Part1

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

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

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

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

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

...