Click here to Skip to main content
15,886,067 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi
I will like to add pinch zoom to the content of textblock in my app for users to increase and decrease the font size as they wish. I have written some code for it but to my amazement it's not working, this is the code below kindly guide me

Xaml

XML
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">



            <ScrollViewer Grid.Row="1">
                <TextBlock TextWrapping="Wrap" Foreground="Black" >
                    The life of Enoch Adejare Adeboye is a fulfillment of the scriptures in Zechariah 4: 10 which declare, "despise not the days of small beginnings.<LineBreak/><LineBreak/>


                    <TextBlock.RenderTransform>
                        <CompositeTransform x:Name="transform" />
                    </TextBlock.RenderTransform>
                    <toolkit:GestureService.GestureListener>
                        <toolkit:GestureListener PinchStarted="OnPinchStarted" PinchDelta="OnPinchDelta" DoubleTap="GestureListener_DoubleTap" DragDelta="GestureListener_DragDelta"  />
                    </toolkit:GestureService.GestureListener>

                </TextBlock>
            </ScrollViewer>

        </Grid>


Xaml.cs

C#
private void OnPinchStarted(object sender, PinchStartedGestureEventArgs e)
        {
            var text = sender as TextBlock;
            var transform = text.RenderTransform as CompositeTransform;
            angle = transform.Rotation;
            scale = transform.ScaleX;
        }

        private void OnPinchDelta(object sender, PinchGestureEventArgs e)
        {
            var text = sender as TextBlock;
            var transform = text.RenderTransform as CompositeTransform;
            transform.Rotation = angle + e.TotalAngleDelta;
            transform.ScaleX = scale * e.DistanceRatio;
            transform.ScaleY = scale * e.DistanceRatio;
        }

        private void GestureListener_DoubleTap(object sender, GestureEventArgs e)
        {
            var text = sender as TextBlock;
            var transform = text.RenderTransform as CompositeTransform;
            transform.ScaleX = transform.ScaleY = 1;
        }

        private void GestureListener_DragDelta(object sender, DragDeltaGestureEventArgs e)
        {
            var text = sender as TextBlock;
            var transform = text.RenderTransform as CompositeTransform;
            transform.TranslateX += e.HorizontalChange;
            transform.TranslateY += e.VerticalChange;
        }

        public double angle { get; set; }

        public double scale { get; set; }


Thank you in advance and reply soon
Posted
Updated 17-Feb-15 0:50am
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900