Масштаб / прокрутка до курсора - PullRequest
1 голос
/ 06 октября 2009

У меня проблема при увеличении / уменьшении изображения в средстве прокрутки. Когда я использую кнопку увеличения, я использую двойную анимацию для ширины / высоты изображения до 1,25 от его исходного размера при каждом нажатии кнопки. То же самое касается кнопки уменьшения масштаба, которая устанавливает коэффициент масштабирования равным 0,75. Пока все хорошо.

Проблема заключается в том, что в зависимости от того, где я щелкаю относительно центра идентификатора пользователя прокрутки, нравится прокрутка к точке щелчка. На основании этого я вычисляю дельту x / y, которая используется для определения направления прокрутки по осям x и y.

double deltaX = (ClickPosition.X - center.X)
double deltaY = (ClickPosition.Y - center.Y)

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

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

Пример: http://212.214.41.66/SilverlightZoom/RealQImageMapTestPage.html

Источник: http://212.214.41.66/SilverlightZoom/ImageMap.zip

1 Ответ

1 голос
/ 08 октября 2009

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

<Image x:Name="img" Margin="151,127,208,142" Source="Waterfall.jpg" Stretch="Fill">
                   <Image.RenderTransform>
                   <ScaleTransform x:Name="imagescale" ScaleX="1.2" ScaleY="1.2" CenterX="100" CenterY="100">
                   </ScaleTransform>
                   </Image.RenderTransform>
                   </Image>

Этот образец кода был взят из здесь

Это должно позволить вам установить масштабирование для ClickPosition, привязав его к свойству.

С другой стороны: я не уверен, что вы хотели, чтобы ваше масштабирование работало так, но если вы увеличите масштаб на 1,25, вам следует уменьшить масштаб на 1 / 1,25, а не на 0,75. Это будет сохранять постоянное масштабирование, когда ваш масштаб изменяется по мере продвижения (т.е. если я увеличу дважды и уменьшу дважды, у меня больше не будет 1).

...