locked
Помогите изобрести велосипед (Image Viewer) RRS feed

  • Вопрос

  • Приветствую.

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

    PS

    Пивот не предлагать.

    • Изменено Alexey Gurin 12 сентября 2014 г. 11:14
    12 сентября 2014 г. 11:01

Ответы

Все ответы

  • Раз вы изобретаете свой "велосипед", то можете просто при открытии одного изображения получить список файлов в этой директории и сохранить его в созданной вами коллекции изображений ICollection<MyPicture> Files {get; set; }

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

    public MyPicture Current { get; set; } // это текущее изображение которое сейчас видит пользователь

    Происходит событие перелистывания (как это у вас будет не могу знать)

    ...

    this.Current = this.Files.SkipWhile(file => file.Name != this.Current.Name).Skip(1).FirstOrDefault(); //назначаем следующий файл

    ну и конечно не забывайте про событие NotifyPropertyChanged дабы все подгрузилось


    [Блог] [Twitter]


    • Изменено Ihar Maiseyeu 12 сентября 2014 г. 13:32
    12 сентября 2014 г. 13:31
  • Это все понятно. У меня вопрос как у UI-части все это заставить работать. Некоторые эксперементы привели меня к использованию ListBox с горизонтальной ориентацией. Но хочется, чтобы скроллинг был не целиком всего ListBoxа, а отдельно по фотографии. Нужно хендлить DragCompleted, как минимум, и в нем анимировать скроллинг к изображению, чтобы оно оказалось по центру.

    Написал код, который почему то ни черта не работает:

                ScrollViewer LScrollViewer = FindVisualChild<ScrollViewer>(lb_photos);
    
                DoubleAnimation hAnimation = new DoubleAnimation();
    
                hAnimation.From = LScrollViewer.HorizontalOffset;
                hAnimation.To = 480;
                hAnimation.Duration = new Duration( TimeSpan.FromSeconds(1) );
                           
                Storyboard storyboard = new Storyboard();
    
                storyboard.Children.Add(hAnimation);
                Storyboard.SetTarget(hAnimation, LScrollViewer);
                Storyboard.SetTargetProperty(hAnimation, new PropertyPath(ScrollViewer.HorizontalOffsetProperty)); 
    
                storyboard.Begin();


    • Изменено Alexey Gurin 12 сентября 2014 г. 14:34
    12 сентября 2014 г. 14:33
  • Интересная штука. Но хотелось бы, чтобы и на 7 работала. Стараюсь оттянуть разделение кода на 7 и 8 как можно дальше. Хочу осуществить весь функционал для 7+, а потом уже разделю код и буду фичи 8 юзать, в том числе и эту карусель, как пример.

    С анимацией кстати разобрался, но вылезла другая проблема. При зуме все начинает тормозить, т.к. видимо перерисовывается весь лист бокс со всеми элементами. Можно наверное сделать, чтобы физически загруженными били только 3 фото (в центе и по бокам), но думаю проблему это не рещит. Как бы сделать зум нормально, может в попапе? или, или.. даже не знаю

    18 сентября 2014 г. 11:50