Dynamic Transforms

Applying transforms to elements in XAML is fairly straight forward, for example the following will rotate some text:

Obviously this is fine for static rotation values, and animations using a Storyboard, however what if you want to specify the rotation in C#?  Or perhaps a Scale Transform in C#?

Dynamic Transforms

This simple example allows you to specify Rotation and Scale values and the image is rotated to reflect the current settings.

<UserControl x:Class="DynamicTransforms.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
    <Grid x:Name="LayoutRoot">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <Image x:Name="image" Grid.Column="0" Source="assets/sign.jpg" Stretch="None" />
        <StackPanel Grid.Column="1" Orientation="Vertical">
            <TextBlock Text="Scale X" />
            <TextBox x:Name="scaleX" Width="50" Text="1.0" TextChanged="TextBox_TextChanged" />
            <TextBlock Text="Scale Y" />
            <TextBox x:Name="scaleY" Width="50" Text="1.0" TextChanged="TextBox_TextChanged" />
            <TextBlock Text="Rotation Angle" />
            <TextBox x:Name="rotate" Width="50" Text="0.0" TextChanged="TextBox_TextChanged" />
        </StackPanel>
    </Grid>
</UserControl>


Here we have 3 textboxes that allow you to specify the Rotation angle and the Scale X/Y values.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace DynamicTransforms
{
    public partial class MainPage : UserControl
    {
        TransformGroup _tg = new TransformGroup();
        ScaleTransform _st = new ScaleTransform();
        RotateTransform _rt = new RotateTransform();
        private DispatcherTimer _timer = new DispatcherTimer();

        public MainPage()
        {
            InitializeComponent();

            Setup();
        }

        private void Setup()
        {
            _st.ScaleX = 1;
            _st.ScaleY = 1;

            _tg.Children.Add(_st);
            _tg.Children.Add(_rt);

            image.RenderTransform = _tg;
        }

        private void ValueChanged()
        {
            _st.ScaleX = double.Parse(scaleX.Text);
            _st.ScaleY = double.Parse(scaleY.Text);
            _rt.Angle = double.Parse(rotate.Text);
            _rt.CenterX = image.ActualWidth * 0.5;
            _rt.CenterY = image.ActualHeight * 0.5;
        }

        private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            ValueChanged();
        }
    }
}


obviously you will need to the alter the image source in the XAML above.

Post your Comments

Post your Comments

 
Latest Games
Zombie Escape
Apr 19, 2016
Plays: 1,318

Zombie Escape ScreenshotDrive fast before the crazy mutant zombies get you!

6 Ratings/4.1 Average
Car Parking
Jan 16, 2016
Plays: 1,303

Car Parking ScreenshotGuide the car to its parking space in this fun Car Parking game.

1 Rating/5 Average
Trash It
Jan 11, 2016
Plays: 1,188

Trash It ScreenshotAim for the Trash Can and get the various items of Trash in the bin.

4 Ratings/5 Average
Sky Fly
Jan 11, 2016
Plays: 1,316

Sky Fly ScreenshotFly your plane in this colorful vertical scrolling shoot-em-up. Blast the bad guys and collect any bonus's they leave behind.

1 Rating/5 Average
Professor Snappy
Jan 11, 2016
Plays: 954

Professor Snappy ScreenshotPop as many bubbles as possible in this fun and colorful bubble popping game. The levels start off easy enough but gradually get harder!

1 Rating/5 Average
Monster Match Saga
Jan 10, 2016
Plays: 1,270

Monster Match Saga ScreenshotHere we have a bunch of monsters that need to be matched up. Look out for the bomb and spinning monsters that will cause special damage!

3 Ratings/4.6 Average
Fly Bird Fly
Jan 10, 2016
Plays: 997

Fly Bird Fly ScreenshotGuide your friendly Bird through the maze of pipes and other obstacles collecting the Stars in this cool arcade game inspired by the legendary Flappy Bird.

1 Rating/5 Average
Life In One
Jan 10, 2016
Plays: 1,209

Life In One ScreenshotYou are stranded on an Alien planet. Your goal is to build a space rocket and escape. Start by building units to create power and mine the metal patches. Build defenses to defend your base from the advancing Aliens and Zombies!

2 Ratings/3 Average
X Pool
Jan 02, 2016
Plays: 1,663

X Pool ScreenshotPlay Pool against the computer or battle against your friends in the online mode!

3 Ratings/3 Average
Fruit Slicer
Jan 02, 2016
Plays: 949

Fruit Slicer ScreenshotSlice the fruit that is thrown up onto the screen. Slice the fruit into multiple pieces for maximum points!

1 Rating/5 Average