реализовать масштабирование изображения в программе просмотра прокрутки на телефоне с Windows

Я поместил элемент управления изображением в средство просмотра прокрутки, как и tnis:

        <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" >
        <Image Source="/Test/1.jpg" Width="320">
            <Image.RenderTransform>
                <CompositeTransform ScaleX="{Binding Path=Value, ElementName=slider}"/>
            </Image.RenderTransform>
        </Image>
    </ScrollViewer>

Как показывает код, я добавил ползунок для управления преобразованием композиции изображения, но когда я изменяю значение ползунка, ничего не происходит?

И я также попытался прикрепить к изображению поведение масштабирования и панорамирования (в зависимости от набора инструментов), к сожалению, я мог прокручивать вверх и вниз, но не мог увеличивать / уменьшать изображение. Похоже, Scrollviewer заблокировал манипуляцию щипком.

Как мы знаем, элемент управления Scrollviewer имел свойство ZoomMode в WPF, но не рекомендуется в Windows Phone. Итак, как я могу реализовать масштабирование iamge в средстве просмотра прокрутки, может ли кто-нибудь помочь мне?


person HamGuy    schedule 23.01.2013    source источник
comment
Задал аналогичный вопрос: stackoverflow.com/questions/14652618/ Похоже, реализовать плавное масштабирование и панорамирование не так просто, как можно было бы надеяться.   -  person Pking    schedule 02.02.2013


Ответы (1)


код xaml:

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <ScrollViewer x:Name="scrl" Height="300" Width="300" BorderBrush="red"
                      BorderThickness="2" VerticalScrollBarVisibility="Disabled">
            <StackPanel>
                <Image x:Name="img" Source="Assets/Mountain.jpg" Height="100" Width="150"
                       RenderTransformOrigin="0.5,0.5">
                    <Image.RenderTransform>
                        <CompositeTransform x:Name="trans"/>
                    </Image.RenderTransform>
                    <toolkit:GestureService.GestureListener>
                        <toolkit:GestureListener PinchStarted="GestureListener_PinchStarted" PinchDelta="GestureListener_PinchDelta" DragDelta="GestureListener_DragDelta"/>
                    </toolkit:GestureService.GestureListener>
                </Image>
            </StackPanel>
        </ScrollViewer>
    </Grid>

код cs:

    double _initialAngle, _initialScale;
    public MainPage()
    {
        InitializeComponent();
        scrl.ManipulationMode = ManipulationMode.Control;
    }

    private void GestureListener_PinchStarted(object sender, PinchStartedGestureEventArgs e)
    {
        _initialAngle = trans.Rotation;
        _initialScale = trans.ScaleX;
    }

    private void GestureListener_PinchDelta(object sender, PinchGestureEventArgs e)
    {
        trans.Rotation = _initialAngle + e.TotalAngleDelta;
        var curZoom = _initialScale * e.DistanceRatio;
        if (curZoom >= 1 && curZoom <= 3)
        {
            trans.ScaleX = _initialScale * e.DistanceRatio;
            trans.ScaleY = _initialScale * e.DistanceRatio;
        }
    }

    private void GestureListener_DragDelta(object sender, DragDeltaGestureEventArgs e)
    {
        trans.TranslateX += e.HorizontalChange;
        trans.TranslateY += e.VerticalChange;
    }

этот код работает для масштабирования, поворота и масштабирования.

person Dev    schedule 23.05.2014