best pdf viewer control for asp.net : Add page break to pdf application SDK tool html .net wpf online Pro_Silverlight_5_in_CSharp_4th_edition39-part103

CHAPTER 11  ADVANCED ANIMATION 
382 
Figure 11-1. Animating a render transform 
This approach has two limitations. First, because the code reuses the same storyboards for all the 
buttons, there’s no way to have two buttons rotating at once. For example, if you quickly slide the mouse 
over several buttons, the buttons you leave first may not rotate all the way back to their initial position, 
because the storyboard is commandeered by another button. If this behavior is a problem, you can code 
around it by creating the storyboards you need dynamically in code. You’ll see how to implement this 
technique later in this chapter, when you consider the bomb game. 
The other shortcoming in this example is the fact that you need a fair bit of markup to define the 
margins, event handlers, and transforms for all the buttons. You can streamline this markup by using 
styles to apply the same settings to various buttons (see Chapter 14) or by configuring the buttons 
programmatically. 
Animation Perspective Projections 
Just as you can animate transforms, you can also animate perspective projections—namely, the 
PlaneProjection class you studied in Chapter 8, which allows you to simulate a flat, tilted 3-D surface. 
For example, imagine you have a group of elements wrapped in a Border control and that border uses a 
PlaneProjection, as shown here: 
<Border CornerRadius="2" Padding="10" Height="140" Width="170" 
BorderBrush="SlateGray" BorderThickness="4"> 
<Border.Projection> 
<PlaneProjection x:Name="projection"></PlaneProjection> 
www.it-ebooks.info
Add page break to pdf - insert pages into PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide C# Users to Insert (Empty) PDF Page or Pages from a Supported File Format
adding page numbers to a pdf in reader; add a blank page to a pdf
Add page break to pdf - VB.NET PDF Page Insert Library: insert pages into PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use VB.NET APIs to Add a New Blank Page to PDF Document
add pages to pdf without acrobat; add pages to pdf preview
CHAPTER 11  ADVANCED ANIMATION 
383 
</Border.Projection
... 
</Border
Currently, the PlaneProjection in this example doesn’t do anything. To change the way the elements 
are rendered, you need to modify the RotateX, RotateY, and RotateZ properties of the PlaneProjection 
object, which turns the 2-D surface of the border around the appropriate axis. You saw how to pull this 
off in Chapter 8, but now you’ll use an animation to change these properties gradually and continuously. 
Here’s an animation that modifies all three rotation properties at different speeds, which gives the 
dizzying impression that the border is tumbling through 3-D space: 
<Storyboard x:Name="spinStoryboard"> 
<DoubleAnimation Storyboard.TargetName="projection" RepeatBehavior="Forever" 
Storyboard.TargetProperty="RotationY" From="0" To="360" Duration="0:0:3"> 
</DoubleAnimation
<DoubleAnimation Storyboard.TargetName="projection" RepeatBehavior="Forever" 
Storyboard.TargetProperty="RotationZ" From="0" To="360" Duration="0:0:30"> 
</DoubleAnimation
<DoubleAnimation Storyboard.TargetName="projection" RepeatBehavior="Forever" 
Storyboard.TargetProperty="RotationX" From="0" To="360" Duration="0:0:40"> 
</DoubleAnimation
</Storyboard
Figure 11-2 shows the rotating border captured at two different points in its animation. 
Figure 11-2. Spinning an element in 3-D 
www.it-ebooks.info
C# PDF Convert: How to Convert Jpeg, Png, Bmp, & Gif Raster Images
Add necessary references to your C# project: Console.WriteLine("Fail: can not convert to PDF, file type unsupport"); break; case ConvertResult
add pages to pdf online; add page numbers to pdf in reader
C# Image Convert: How to Convert Word to Jpeg, Png, Bmp, and Gif
Add necessary references to your C# project: a document"); default: Console.WriteLine(" Fail: unknown error"); break; }. code just convert first word page to Png
add pages to an existing pdf; add page pdf
CHAPTER 11  ADVANCED ANIMATION 
384 
Although this technique may seem like gratuitous eye candy, a little 3-D rotation can go a long way. 
It’s particularly useful when you’re implementing transitions between different content. For example, 
you can create a panel that flips over and reveals different content on its back side. To do so, you take 
one panel and rotate it around the x- or y-axis from 0 to 90 degrees (at which point it appears to 
disappear because it’s edge-on). You then continue with a second animation that rotates a different 
panel from -90 degrees to 0 degrees, exposing the new content. 
Animating Brushes 
Animating brushes is another common technique in Silverlight animations, and it’s just as easy as 
animating transforms. Again, the technique is to dig into the particular subproperty you want to change, 
using the appropriate animation type. 
Figure 11-3 shows an example that tweaks a RadialGradientBrush you studied in Chapter 9. As the 
animation runs, the center point of the radial gradient drifts along the ellipse, giving it a three-
dimensional effect. At the same time, the outer color of the gradient changes from blue to black. 
Figure 11-3. Altering a radial gradient 
To perform this animation, you need to use two animation types that you haven’t considered yet. 
ColorAnimation blends gradually between two colors, creating a subtle color-shift effect. 
PointAnimation allows you to move a point from one location to another. (It’s essentially the same as if 
you modified both the x coordinate and the y coordinate using a separate DoubleAnimation, with linear 
interpolation.) You can use a PointAnimation to deform a figure that you’ve constructed out of points or 
to change the location of the radial gradient’s center point, as in this example. 
www.it-ebooks.info
C# PDF File Split Library: Split, seperate PDF into multiple files
Support to break a large PDF file into smaller files. is set as 1, then the two output PDF files will contains the first page and the Add necessary references:
add blank page to pdf preview; adding page numbers to a pdf document
VB.NET PDF File Split Library: Split, seperate PDF into multiple
Support to break a large PDF file into smaller files in .NET can split target multi-page PDF document file to one-page PDF files or Add necessary references:
add and delete pages from pdf; add contents page to pdf
CHAPTER 11  ADVANCED ANIMATION 
385 
Here’s the markup that defines the ellipse and its brush: 
<Ellipse x:Name="ellipse" Margin="5" Grid.Row="1" Stretch="Uniform"> 
<Ellipse.Fill> 
<RadialGradientBrush x:Name="ellipseBrush" 
RadiusX="1" RadiusY="1" GradientOrigin="0.7,0.3"> 
<GradientStop x:Name="ellipseBrushStop" Color="White" 
Offset="0"></GradientStop> 
<GradientStop Color="Blue" Offset="1"></GradientStop> 
</RadialGradientBrush> 
</Ellipse.Fill> 
</Ellipse> 
And here are the two animations that move the center point and change the second color in the 
gradient: 
<Storyboard x:Name="ellipseStoryboard"> 
<PointAnimation Storyboard.TargetName="ellipseBrush" 
Storyboard.TargetProperty="GradientOrigin" 
From="0.7,0.3" To="0.3,0.7" Duration="0:0:10" AutoReverse="True" 
RepeatBehavior="Forever"> 
</PointAnimation> 
<ColorAnimation Storyboard.TargetName="ellipseBrushStop" 
Storyboard.TargetProperty="Color" 
To="Black" Duration="0:0:10" AutoReverse="True" 
RepeatBehavior="Forever"> 
</ColorAnimation> 
</Storyboard> 
You can create a huge range of hypnotic effects by varying the colors and offsets in 
LinearGradientBrush and RadialGradientBrush. And if that’s not enough, gradient brushes also have 
their own RelativeTransform property that you can use to rotate, scale, stretch, and skew them. (The 
WPF team has a fun tool called Gradient Obsession for building gradient-based animations, most of 
which will work with Silverlight with some adjustment. You can find it at http://tinyurl.com/yc5fjpm.) 
Animating Pixel Shaders 
In Chapter 9, you learned about pixel shaders—low-level routines that can apply bitmap-style effects 
such as blurs, glows, and warps to any element. On their own, pixel shaders are an interesting but only 
occasionally useful tool. But combined with animation, they become much more versatile. You can use 
them to design eye-catching transitions (for example, by blurring one control out, hiding it, and then 
blurring another one in). Or, you can use them to create impressive user-interactivity effects (for 
example, by increasing the glow on a button when the user moves the mouse over it). Best of all, you can 
animate the properties of a pixel shader just as easily as you animate anything else. 
Figure 11-4 shows a page that’s based on the rotating button example shown earlier. It contains a 
sequence of buttons, and when the user moves the mouse over one of the buttons, an animation is 
attached and started. The difference is that the animation in this example doesn’t rotate the button—
instead, it reduces the blur radius to 0. The result is that as you move the mouse, the nearest control 
slides sharply and briskly into focus. 
www.it-ebooks.info
C# TWAIN - Query & Set Device Abilities in C#
properties using C# TWAIN image acquiring library add-on step by device. TwainTransferMode = method; break; } if (method == TwainTransferMethod.TWSX_FILE)
add page to pdf in preview; add page numbers pdf file
C# TWAIN - Install, Deploy and Distribute XImage.Twain Control
are three parts on this page, including system Add the following C# demo code to device.TwainTransferMode = method; break; } if (method == TwainTransferMethod
add page numbers to pdf files; add multi page pdf to word document
CHAPTER 11  ADVANCED ANIMATION 
386 
Figure 11-4. Animating a pixel shader 
The code is the same as in the rotating button example. You need to give each button a BlurEffect 
instead of a RotateTransform: 
<Button Content="One" Margin="10" 
MouseEnter="cmd_MouseEnter" MouseLeave="cmd_MouseLeave"> 
<Button.Effect> 
<BlurEffect Radius="10"></BlurEffect> 
</Button.Effect> 
</Button> 
You also need to change the animation accordingly: 
<Storyboard x:Name="blurStoryboard"> 
<DoubleAnimation Storyboard.TargetProperty="Radius" 
To="0" Duration="0:0:0.4"></DoubleAnimation> 
</Storyboard> 
<Storyboard x:Name="unblurStoryboard"> 
<DoubleAnimation Storyboard.TargetProperty="Radius" To="10" 
Duration="0:0:0.2"></DoubleAnimation> 
</Storyboard> 
In this example, the Storyboard.TargetElement property isn’t set in XAML because it’s set in code, 
when the MouseEnter or MouseLeave event fires. This is exactly the same technique you saw in the 
rotating button example. 
www.it-ebooks.info
C# TWAIN - Acquire or Save Image to File
RasterEdge.XDoc.PDF.dll. acquire image to file using our C#.NET TWAIN Add-On Group4) device.Compression = TwainCompressionMode.Group3; break; } } acq.FileTranfer
add pages to pdf document; add page number to pdf file
C# TWAIN - Specify Size and Location to Scan
be found at this tutorial page of how TWAIN image scanning control add-on owns TwainStaticFrameSizeType.LetterUS) { this.device.FrameSize = frame; break; } } }.
add blank page to pdf; add document to pdf pages
CHAPTER 11  ADVANCED ANIMATION 
387 
You could use the same approach in reverse to highlight a button. For example, you could use a 
pixel shader that applies a glow effect to highlight the moused-over button. And if you’re interested in 
using pixel shaders to animate page transitions, check out the WPF Shader Effects Library (which also 
works with Silverlight) at http://wpffx.codeplex.com. It includes a range of eye-popping pixel shaders 
beyond Silverlight’s standard plain BlurEffect and DropShadowEffect, as well as a set of helper classes 
for performing transitions with them. 
Key-Frame Animation 
All the animations you’ve seen so far have used interpolation to move from a starting point to an ending 
point. But what if you need to create an animation that has multiple segments and moves less regularly? 
For example, you may want to create an animation that quickly slides an element partially into view, 
then moves it more slowly, and then speeds up again to move it the rest of the way into place. Animation 
easing won’t help—it’s intended to create pleasing, natural motion, not provide a specifically tuned 
animation that changes speed multiple times or at precise points. You could achieve this effect by 
creating a sequence of two animations and using the BeginTime property to start the second animation 
after the first one. However, there’s an easier approach: you can use a key-frame animation. 
key-frame animation is an animation that’s made up of many short segments. Each segment 
represents an initial, final, or intermediary value in the animation. When you run the animation, it 
moves smoothly from one value to another. 
For example, consider the Point animation that allowed you to move the center point of a 
RadialGradientBrush from one spot to another: 
<PointAnimation Storyboard.TargetName="ellipseBrush" 
Storyboard.TargetProperty="GradientOrigin" 
From="0.7,0.3" To="0.3,0.7" Duration="0:0:10" AutoReverse="True" 
RepeatBehavior="Forever"> 
</PointAnimation> 
You can replace this PointAnimation object with an equivalent PointAnimationUsingKeyFrames 
object, as shown here: 
<PointAnimationUsingKeyFrames Storyboard.TargetName="ellipseBrush" 
Storyboard.TargetProperty="GradientOrigin" 
AutoReverse="True" RepeatBehavior="Forever" > 
<LinearPointKeyFrame Value="0.7,0.3" KeyTime="0:0:0"></LinearPointKeyFrame> 
<LinearPointKeyFrame Value="0.3,0.7" KeyTime="0:0:10"></LinearPointKeyFrame> 
</PointAnimationUsingKeyFrames> 
This animation includes two key frames. The first sets the Point value when the animation starts. (If 
you want to use the current value that’s set in the RadialGradientBrush, you can leave out this key 
frame.) The second key frame defines the end value, which is reached after 10 seconds. The 
PointAnimationUsingKeyFrames object performs linear interpolation to move smoothly from the first 
key-frame value to the second, just as the PointAnimation does with the From and To values. 
 Note  Every key-frame animation uses its own key-frame animation object (like LinearPointKeyFrame). For the 
most part, these classes are the same—they include a Value property that stores the target value and a KeyTime 
www.it-ebooks.info
CHAPTER 11  ADVANCED ANIMATION 
388 
property that indicates when the frame reaches the target value. The only difference is the data type of the Value 
property. In a LinearPointKeyFrame it’s a Point, in a DoubleKeyFrame it’s a double, and so on. 
You can create a more interesting example using a series of key frames. The following animation 
walks the center point through a series of positions that are reached at different times. The speed at 
which the center point moves changes depending on the duration between key frames and how much 
distance needs to be covered: 
<PointAnimationUsingKeyFrames Storyboard.TargetName="ellipseBrush" 
Storyboard.TargetProperty="GradientOrigin" 
RepeatBehavior="Forever" > 
<LinearPointKeyFrame Value="0.7,0.3" KeyTime="0:0:0"></LinearPointKeyFrame> 
<LinearPointKeyFrame Value="0.3,0.7" KeyTime="0:0:5"></LinearPointKeyFrame> 
<LinearPointKeyFrame Value="0.5,0.9" KeyTime="0:0:8"></LinearPointKeyFrame> 
<LinearPointKeyFrame Value="0.9,0.6" KeyTime="0:0:10"></LinearPointKeyFrame> 
<LinearPointKeyFrame Value="0.8,0.2" KeyTime="0:0:12"></LinearPointKeyFrame> 
<LinearPointKeyFrame Value="0.7,0.3" KeyTime="0:0:14"></LinearPointKeyFrame> 
</PointAnimationUsingKeyFrames> 
This animation isn’t reversible, but it does repeat. To make sure there’s no jump between the final 
value of one iteration and the starting value of the next iteration, the animation ends at the same center 
point where it began. 
Discrete Key Frames 
The key frame animation you saw in the previous example uses linear key frames. As a result, it 
transitions smoothly between the key-frame values. Another option is to use discrete key frames. In this 
case, no interpolation is performed. When the key time is reached, the property changes abruptly to the 
new value. 
Linear key-frame classes are named in the form LinearDataTypeKeyFrame. Discrete key-frame 
classes are named in the form DiscreteDataTypeKeyFrame. Here’s a revised version of the 
RadialGradientBrush example that uses discrete key frames: 
<PointAnimationUsingKeyFrames Storyboard.TargetName="ellipseBrush" 
Storyboard.TargetProperty="GradientOrigin" 
RepeatBehavior="Forever" > 
<DiscretePointKeyFrame Value="0.7,0.3" KeyTime="0:0:0"></DiscretePointKeyFrame> 
<DiscretePointKeyFrame Value="0.3,0.7" KeyTime="0:0:5"></DiscretePointKeyFrame> 
<DiscretePointKeyFrame Value="0.5,0.9" KeyTime="0:0:8"></DiscretePointKeyFrame> 
<DiscretePointKeyFrame Value="0.9,0.6" KeyTime="0:0:10"></DiscretePointKeyFrame> 
<DiscretePointKeyFrame Value="0.8,0.2" KeyTime="0:0:12"></DiscretePointKeyFrame> 
<DiscretePointKeyFrame Value="0.7,0.3" KeyTime="0:0:14"></DiscretePointKeyFrame> 
</PointAnimationUsingKeyFrames> 
When you run this animation, the center point jumps from one position to the next at the 
appropriate time. It’s a dramatic (but jerky) effect. 
All key-frame animation classes support discrete key frames, but only some support linear key 
frames. It all depends on the data type. The data types that support linear key frames are the same ones 
that support linear interpolation and provide a DataTypeAnimation class. These are Point, Color, and 
www.it-ebooks.info
CHAPTER 11  ADVANCED ANIMATION 
389 
double. The only other animatable data type is object, which doesn’t support linear interpolation. 
(Essentially, “animating” an object means replacing it with completely new values at specific times in a 
discrete key-frame animation.) 
 Tip  You can combine both types of key frame—linear and discrete—in the same key-frame animation, as long 
as they’re both supported for that data type. 
Easing Key Frames 
Earlier in this chapter, you saw how easing functions can improve ordinary animations. Even though 
key-frame animations are split into multiple segments, each of these segments uses ordinary, boring 
linear interpolation. 
If this isn’t what you want, you can use animation easing to add acceleration or deceleration to 
individual key frames. However, the ordinary linear key frame and discrete key-frame classes don’t 
support this feature. Instead, you need to use an easing key frame, such as EasingDoubleKeyFrame, 
EasingColorKeyFrame, or EasingPointKeyFrame. Each one works the same way as its linear counterpart 
but exposes an additional EasingFunction property. 
Here’s an example that uses animation easing to apply an accelerating effect to the first five seconds 
of the key-frame animation: 
<PointAnimationUsingKeyFrames Storyboard.TargetName="ellipseBrush" 
Storyboard.TargetProperty="GradientOrigin" 
RepeatBehavior="Forever" > 
<LinearPointKeyFrame Value="0.7,0.3" KeyTime="0:0:0"></LinearPointKeyFrame> 
<EasingPointKeyFrame Value="0.3,0.7" KeyTime="0:0:5"> 
 <EasingPointKeyFrame.EasingFunction> 
<CircleEase></CircleEase> 
</EasingPointKeyFrame.EasingFunction> 
</EasingPointKeyFrame> 
<LinearPointKeyFrame Value="0.5,0.9" KeyTime="0:0:8"></LinearPointKeyFrame> 
<LinearPointKeyFrame Value="0.9,0.6" KeyTime="0:0:10"></LinearPointKeyFrame> 
<LinearPointKeyFrame Value="0.8,0.2" KeyTime="0:0:12"></LinearPointKeyFrame> 
<LinearPointKeyFrame Value="0.7,0.3" KeyTime="0:0:14"></LinearPointKeyFrame> 
</PointAnimationUsingKeyFrames> 
The combination of key frames and animation easing is a convenient way to model complex 
animations, but it still may not give you the control you need. Instead of using animation easing, you can 
create a mathematical formula that dictates the progression of your animation. This is the technique 
you’ll learn in the next section. 
Spline Key Frames 
There’s one more type of key frame: a spline key frame. Every class that supports linear key frames also 
supports spline key frames, and they’re named in the form SplineDataTypeKeyFrame. 
Like linear key frames, spline key frames use interpolation to move smoothly from one key value to 
another. The difference is that every spline key frame sports a KeySpline property. Using the KeySpline 
www.it-ebooks.info
CHAPTER 11  ADVANCED ANIMATION 
390 
property, you define a cubic Bézier curve that influences the way interpolation is performed. Although 
it’s tricky to get the effect you want (at least without an advanced design tool to help you), this technique 
gives you the ability to create more seamless acceleration and deceleration and more lifelike motion. 
As you may remember from Chapter 8, a Bézier curve is defined by a start point, an end point, and 
two control points. In the case of a key spline, the start point is always (0,0), and the end point is always 
(1,1). You supply the two control points. The curve that you create describes the relationship between 
time (in the x-axis) and the animated value (in the y-axis). 
Here’s an example that demonstrates a key-spline animation by comparing the motion of two 
ellipses across a Canvas. The first ellipse uses a DoubleAnimation to move slowly and evenly across the 
page. The second ellipse uses a DoubleAnimationUsingKeyFrames with two SplineDoubleKeyFrame 
objects. It reaches the destination at the same times (after 10 seconds), but it accelerates and decelerates 
during its travel, pulling ahead and dropping behind the other ellipse: 
<DoubleAnimation Storyboard.TargetName="ellipse1" 
Storyboard.TargetProperty="(Canvas.Left)" 
To="500" Duration="0:0:10"> 
</DoubleAnimation> 
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="ellipse2" 
Storyboard.TargetProperty="(Canvas.Left)" > 
<SplineDoubleKeyFrame KeyTime="0:0:5" Value="250" 
KeySpline="0.25,0 0.5,0.7"></SplineDoubleKeyFrame> 
<SplineDoubleKeyFrame KeyTime="0:0:10" Value="500" 
KeySpline="0.25,0.8 0.2,0.4"></SplineDoubleKeyFrame> 
</DoubleAnimationUsingKeyFrames> 
The fastest acceleration occurs shortly after the five-second mark, when the second 
SplineDoubleKeyFrame kicks in. Its first control point matches a relatively large y-axis value, which 
represents the animation progress (0.8) against a correspondingly smaller x-axis value, which represents 
the time. As a result, the ellipse increases its speed over a small distance before slowing down again. 
Figure 11-5 shows a graphical depiction of the two curves that control the movement of the ellipse. 
To interpret these curves, remember that they chart the progress of the animation from top to bottom. 
Looking at the first curve, you can see that it follows a fairly even progress downward, with a short pause 
at the beginning and a gradual leveling off at the end. However, the second curve plummets downward 
quickly, achieving the bulk of its progress, and then levels off for the remainder of the animation. 
www.it-ebooks.info
CHAPTER 11  ADVANCED ANIMATION 
391 
Figure 11-5. Charting the progress of a key-spline animation 
Animations in Code 
Sometimes, you’ll need to create every detail of an animation programmatically in code. In fact, this 
scenario is fairly common. It occurs any time you have multiple animations to deal with, and you don’t 
know in advance how many animations there will be or how they should be configured. (This is the case 
with the simple bomb-dropping game you’ll see in this section.) It also occurs if you want to use the 
same animation in different pages or you simply want the flexibility to separate all the animation-related 
details from your markup for easier reuse. (This is the case with animation that’s used for page 
transitions later in this chapter.) 
It isn’t difficult to create, configure, and launch an animation programmatically. You just need to 
create the animation and storyboard objects, add the animations to the storyboard, and start the 
storyboard. You can perform any cleanup work after your animation ends by reacting to the 
Storyboard.Completed event. 
In the following example, you’ll see how to create the game shown in Figure 11-6. Here, a series of 
bombs are dropped at ever-increasing speeds. The player must click each bomb to defuse it. When a set 
limit is reached—by default, five dropped bombs—the game ends. 
www.it-ebooks.info
Documents you may be interested
Documents you may be interested