Какой элемент управления использовать для отображения увеличенного изображения в Windows Phone 7 - PullRequest
3 голосов
/ 02 сентября 2010

Я хотел бы отобразить увеличенное изображение на устройстве Windows Phone 7. Мне нужно иметь возможность увеличивать и уменьшать масштаб, используя жест мультитач. Мне было интересно, есть ли какой-либо элемент управления, который может сделать это из коробки в Windows Phone 7 SDK?

Ответы [ 3 ]

6 голосов
/ 03 сентября 2010

Если вы не хотите использовать DeepZoom, вы также можете использовать ViewBox , чтобы содержать изображение, и прослушивать жесты / события щепотки касанием и увеличивать и уменьшать масштаб ViewBox с помощью RenderTransform.,

Ниже приведен код, который я использовал для приложения Silverlight, который при некоторой работе можно было изменить, реагируя на жесты Pinch и touch, вместо событий mousewheel + click / drag.Также может быть возможно изменить величину масштабирования в зависимости от «силы» жеста повышения.

Для окна просмотра, определенного в XAML:

    <Border Name="viewboxBackground" Background="Black">
            <Viewbox Name="viewboxMain">
                <!--your content here -->
            </Viewbox>
    </Border>   

Код позади:

    #region Pan and Zoom Events and Handlers

    void MouseClickHandler(object sender, MouseButtonEventArgs e)
    {
        _mouseClickPos = e.GetPosition(viewboxBackground);
        bMoving = true;
    }

    void MouseMoveHandler(object sender, MouseEventArgs e)
    {

        if (bMoving)
        {
            //get current transform
            CompositeTransform transform = viewboxMain.RenderTransform as CompositeTransform;

            Point currentPos = e.GetPosition(viewboxBackground);
            transform.TranslateX += (currentPos.X - _mouseClickPos.X);
            transform.TranslateY += (currentPos.Y - _mouseClickPos.Y);

            viewboxMain.RenderTransform = transform;

            _mouseClickPos = currentPos;
        }
    }

    void MouseReleaseHandler(object sender, MouseButtonEventArgs e)
    {
        bMoving = false;
    }

    void MouseWheelZoom(object sender, MouseWheelEventArgs e)
    {
        if (e.Delta > 0)
        {
            _zoomMultiplier += _zoomRate;
            ApplyZoomTransform(viewboxMain, _zoomMultiplier, new Point(viewboxMain.ActualWidth / 2, viewboxMain.ActualHeight / 2));
        }
        else if (e.Delta < 0 && _zoomMultiplier > 1)
        {
            _zoomMultiplier -= _zoomRate;
            ApplyZoomTransform(viewboxMain, _zoomMultiplier, new Point(viewboxMain.ActualWidth / 2, viewboxMain.ActualHeight / 2));
        }
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="element"></param>
    /// <param name="iZoomFactor"></param>
    /// <param name="zoomCenter">If provided, the zoom will be centered around the given position.</param>
    void ApplyZoomTransform(UIElement element, double iZoomFactor, Point? zoomCenter)
    {
        //get current transform
        CompositeTransform transform = viewboxMain.RenderTransform as CompositeTransform;

        if (zoomCenter != null)
        {
            transform.CenterX = zoomCenter.GetValueOrDefault().X;
            transform.CenterY = zoomCenter.GetValueOrDefault().Y;
        }
        transform.ScaleX = iZoomFactor;
        transform.ScaleY = iZoomFactor;

        element.RenderTransform = transform;
    }

    #endregion
2 голосов
/ 02 сентября 2010

Вас может заинтересовать DeepZoom . Не уверен, насколько хорошо он поддерживает жесты мультитач из коробки, но вы можете узнать об использовании жестов здесь и имитации мультитач здесь , если поддержка мультитач не стандарт , Вот пример видео DeepZoom на WP7 .

1 голос
/ 31 октября 2010

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

Поведение MultiTouch для Windows Phone 7

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