Notice that the Storyboard is now slightly more complicated as we have added Acceleration and Deceleration ratios which specify how the change speeds up and slows down and we have made it repeat forever and loop back to its original state.
Once you have the basic idea of animation you can discover most of what you need to know by experimentation. For example, to make the button move diagonally when the user clicks on it, add the following between the EventTrigger.Actions tag:
This moves the top and left properties and repeats the entire action just once.
As you work with XAML it’s easy to forget that you are in fact working with a complete graphics system.
For example, all of the co-ordinates are in terms of absolute measurements rather than pixels and if the user interface is displayed on a higher resolution display device the quality increases, not the size of the text or buttons.
There are also transformations that you can apply to any rendered graphic. For example, if you add:
then the button will be drawn at 45 degrees – it still works as a standard button and even the animation functions. Animating a transformation is also possible.
Buttons just aren’t supposed to behave like this!
Now that you have seen how WPF works you should be able to explore most of its facilities with the help of the documentation. It’s a powerful and unified approach to Windows graphics and you can’t afford to ignore it.
The things to keep in mind is that WPF is built on DirectX and makes use it to render all its graphics. All of the WPF controls are full graphical objects and they are only special in that they use used to respond to user input. WPF includes more sophisicated features such as animation, 3D, data binding and more.
If you would like the code for this project then register and click on CodeBin.
The simplest possible custom effects project is enough for you to see how it all works and to move on to building your own effects that do something useful. This is an introduction to using HLSL in WP [ ... ]
Sometimes loading a bitmap causes an asynchronous download and you have to wait for it to complete before using it - but how best to wait? The standard solution is to use an event but this breaks what [ ... ]