Части изображения отсутствуют при использовании ScaleTransform с LayoutTransformer и Scrollviewer в Windows Phone 7 - PullRequest
2 голосов
/ 03 января 2011

Я пытаюсь получить масштабированное изображение в ScrollViewer в моем приложении Windows Phone 7. На странице приложения я определяю элементы управления следующим образом:

        <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Name="ImageScroller" HorizontalAlignment="Center" VerticalAlignment="Center">
            <layout:LayoutTransformer x:Name="LayoutTransformer">
                <layout:LayoutTransformer.LayoutTransform>
                    <ScaleTransform x:Name="ImageScale"/>
                </layout:LayoutTransformer.LayoutTransform>                    
                <Image x:Name="Image" Margin="4" Source="{Binding ImageSource}"  />
            </layout:LayoutTransformer>
        </ScrollViewer>

Класс LayoutTransformer происходит из проекта расширения Silverlight.

У меня есть методы для обработки событий ZoomIn и ZoomOut, и я делаю там следующее:

    private void ApplicationBarIconButton_Click_1(object sender, EventArgs e)
    {
        // Zoom In 
        ImageScale.ScaleX = ImageScale.ScaleY = ImageScale.ScaleX + 0.5;
        LayoutTransformer.ApplyLayoutTransform();
        ImageScroller.InvalidateMeasure();
    }

Однако, когда у меня есть Zoom-In и изображение изменено, элемент управления ScrollView имеет пустую область внизу и справа от изображения. Почти как если бы Изображение было масштабировано, но обрезано с использованием размера исходного изображения до преобразования масштаба.

Есть идеи, что я делаю не так?

Я также создал проект, который воспроизводит эту проблему: http://dl.dropbox.com/u/2598447/ZoomTest.WP7.zip

1 Ответ

1 голос
/ 12 января 2011

Я наконец-то получил ответ и, надеюсь, решение от Дэвида Энсона из Microsoft. Вот его комментарий, но вы также можете прочитать его ответ в своем блоге:

Ваш телефон может превратиться в робота - LayoutTransformer отлично работает на платформе Windows Phone

Спасибо за отличную демонстрацию! Эта проблема оказывается из-за ограничение Silverlight в Windows Phone 7 - что элементы интерфейса больше 2048x2048 обрезаются до этого размера когда отображается. Вот ссылка на еще немного информации о Проблема:

/.../ BitmapImage stackoverflow.com-размер-ограничений-в-1010 * Silverlight *

В вашем примере тестовое изображение 1201x1401 и я впервые заметил отсечение после 3 "Zoom In" s - что соответствует с коэффициентом масштабирования 1,9x - который переводит на эффективный размер изображения 2282x2662 - что превышает пределы в обоих направлениях. Делать математика, чтобы вычислить сумму этого превышает 2048 дает 234 в горизонтальное направление и 614 в вертикали. Теперь держите эти цифры в и прокрутите весь путь до в правом нижнем углу ScrollViewer на экран вашего телефона 480x800. Обратите внимание, что количество горизонтального черного пространства примерно половина ширины экрана (т.е. ~ 240px) и вертикальный черный пространство составляет около трех четвертей высота экрана (т.е. 600 пикселей) - потому что эти оценки совпадают так близко с перевесами, которые мы только что рассчитали, Я уверен, что ты бежишь в эту проблему.

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

Извините за беспокойство - я надеюсь, что это помогает!

Также в ответе есть ссылка на статью stackoverflow, описывающую основную причину этой проблемы как ограничение платформы Windows Phone 7:

Ограничения по размеру BitmapImage в Silverlight

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