c# free pdf viewer component : Add page number to pdf file control SDK platform web page wpf winforms web browser Pro_Silverlight_5_in_CSharp_4th_edition27-part90

CHAPTER 7  NAVIGATION 
260 
Now that you understand how this application works, it’s time to look at the code that underpins it. 
Creating a Custom Content Loader 
A custom content loader is simply a class that implements INavigationContentLoader. This interface 
requires that you supply the following methods: BeginLoad(), CanLoad(), CancelLoad(), and EndLoad(). 
Although it’s tricky to implement these methods correctly, you can use a shortcut. Simply define an 
instance of the PageResourceContentLoader as a member field, and call its methods as the content 
loader passes through its various stages. To get the idea, consider the following custom content loader, 
which uses PageResourceContentLoader to duplicate the standard navigation behavior exactly
public class CustomContentLoader INavigationContentLoader 
private PageResourceContentLoader loader = new PageResourceContentLoader(); 
public IAsyncResult BeginLoad(Uri targetUri, Uri currentUri,  
AsyncCallback userCallback, object asyncState) 
return loader.BeginLoad(targetUri, currentUri, userCallback, asyncState); 
public bool CanLoad(Uri targetUri, Uri currentUri) 
return loader.CanLoad(targetUri, currentUri); 
public void CancelLoad(IAsyncResult asyncResult) 
loader.CancelLoad(asyncResult); 
public LoadResult EndLoad(IAsyncResult asyncResult) 
return loader.EndLoad(asyncResult); 
As simple as this seems, it provides the basic structure for the AuthenticatingContentLoader that’s 
used in Figure 7-9. But now you need a few more details, starting with two new properties that allow the 
user to designate a login page and the folder that holds secured pages: 
public class AuthenticatingContentLoader INavigationContentLoader 
private PageResourceContentLoader loader = new PageResourceContentLoader(); 
public string LoginPage { get; set; } 
public string SecuredFolder { get; set; } 
...  
The CanLoad(), CancelLoad(), and EndLoad() methods are unchanged. But the BeginLoad() needs a 
bit of fine-tuning. It needs to determine whether the user is currently logged in. If the user isn’t logged in 
and the request is for a page in the secured folder, the user is redirected to the login page. 
www.it-ebooks.info
Add page number to pdf file - 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 a page to a pdf; add page number to pdf
Add page number to pdf file - 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 page numbers to pdf in reader; add page numbers to a pdf
CHAPTER 7  NAVIGATION 
261 
public IAsyncResult BeginLoad(Uri targetUri, Uri currentUri, 
AsyncCallback userCallback, object asyncState) 
if (!App.UserIsAuthenticated) 
if ((System.IO.Path.GetDirectoryName(targetUri.ToString()).Trim('\\') == 
SecuredFolder) && (targetUri.ToString() != LoginPage)) 
// Redirect the request to the login page. 
targetUri = new Uri(LoginPage, UriKind.Relative); 
return loader.BeginLoad(targetUri, currentUri, userCallback, asyncState); 
To track whether a user is logged in, you need to add a Boolean flag to the App class, like this: 
public partial class App Application 
public static bool UserIsAuthenticated  { getset; } 
... 
Now that you have the content loader finished, it’s time to put it to work in the application. 
Using the Custom Content Loader 
Using a custom content loader is likely using any other custom ingredient in your XAML. The first step is 
to map an XML namespace for your project namespace so the content loader is available. In this 
example, the project is named CustomContentLoader: 
<UserControl x:Class="CustomContentLoader.MainPage" 
xmlns:local="clr-namespace:CustomContentLoader" ... 
Next, you need to set the Frame.ContentLoader property with an instance of your custom content 
loader. You also set the properties of the custom content loader at the same time: 
<navigation:Frame x:Name="mainFrame" UriMapper="{StaticResource UriMapper}"> 
<navigation:Frame.ContentLoader
<local:AuthenticatingContentLoader LoginPage="/Login.xaml" 
SecuredFolder="SecurePages"></local:AuthenticatingContentLoader
</navigation:Frame.ContentLoader
</navigation:Frame
The only remaining step is to write the code for the login page. In this example, the login page 
simply checks for a hard-coded password, but a more realistic approach is to call some sort of web 
service (as described in Chapter 19) that authenticates the user on the web server. The important detail 
is that once the user is authenticated, the UserIsAuthenticated flag must be set to true, and the 
application must call the NavigationService.Refresh() method, which repeats the entire navigation 
sequence. This time, because the user is authenticated, no redirection will be performed, so the user will 
end up at the originally requested page. 
private void cmdLogin_Click(object sender, RoutedEventArgs e) 
www.it-ebooks.info
C# PDF File Split Library: Split, seperate PDF into multiple files
If your page number is set as 1, then the two output PDF files will contains the first page and the later three pages Add necessary references:
add pages to pdf in preview; add pdf pages to word document
VB.NET PDF File Split Library: Split, seperate PDF into multiple
can split target multi-page PDF document file to one-page PDF files or PDF file to smaller PDF documents by every given number of pages Add necessary references
adding page numbers to a pdf in preview; add and delete pages in pdf online
CHAPTER 7  NAVIGATION 
262 
// authentication service that runs on an ASP.NET website. 
if (txtPassword.Text == "secret"
App.UserIsAuthenticated = true
navigationService.Refresh(); 
Now the content loader works seamlessly. Of course, there’s much more you could add to this basic 
example. For example, you could configure the AuthenticatingContentLoader to accept a collection of 
authorization rules, which it could then evaluate to determine whether a specific user can access a 
specific page. To delve into more complex authentication like this, and to see examples of more 
sophisticated custom content loaders, be sure to check out David Hill’s blog (www.davidpoll.com). As a 
Silverlight program manager specializing in navigation, he provides helpful insight and several advanced 
custom content loader examples. 
The Last Word 
In this chapter, you considered how to step up from single-page displays to true applications using a 
range of techniques. First, you considered simple content hiding and swapping techniques, which give 
you unlimited flexibility and allow you to simulate navigation. Next, you considered the ChildWindow, 
which allows you to create a pop-up window that appears over the rest of your application. After that, 
you took a detailed look at the Frame and Page classes and Silverlight’s built-in Silverlight navigation 
system, which enables features such as history tracking and deep linking. And finally, you saw how you 
can extend the navigation system using custom content loaders. 
www.it-ebooks.info
C# PDF insert text Library: insert text into PDF content in C#.net
pageIndex, The page index of the PDF page that will be 0
add and delete pages in pdf; add page numbers to pdf online
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
Highlight Text. Add Text. Add Text Box. Drawing Markups. PDF users to do multiple manipulations on PDF file and page Please note that, PDF page number starts from
adding page numbers to pdf in preview; add page numbers to a pdf document
C H A P T E R  8 
263 
Shapes and Transforms 
Silverlight’s 2-D drawing support is the basic foundation for many of its more sophisticated features, 
such as custom-drawn controls, interactive graphics, and animation. Even if you don’t plan to create 
customized art for your application, you need to have a solid understanding of Silverlight’s drawing 
fundamentals. You’ll use it to add professional yet straightforward touches, such as reflection effects. 
You’ll also need it to add interactivity to your graphics—for example, to make shapes move or change in 
response to user actions. 
Silverlight supports a surprisingly large subset of the drawing features from WPF. In this chapter, 
you’ll explore the shape model, which allows you to construct graphics out of rectangles, ellipses, lines, 
and curves. You’ll also consider transforms and projections—specialized objects that can change the 
visual appearance of any element by scaling, rotating, or skewing it. Finally, you’ll see how you can 
convert existing vector art to the XAML format you need, which lets you reuse existing graphics rather 
than build them from scratch. 
Basic Shapes 
The simplest way to draw 2-D graphical content in a Silverlight user interface is to use shapes: dedicated 
classes that represent simple lines, ellipses, rectangles, and polygons. Technically, shapes are known as 
drawing primitives. You can combine these basic ingredients to create more complex graphics. 
The most important detail about shapes in Silverlight is that they all derive from 
FrameworkElement. As a result, shapes are elements. This has a number of important consequences: 
• Shapes draw themselves: You don’t need to manage the invalidation and painting 
process. For example, you don’t need to manually repaint a shape when content 
moves, the page is resized, or the shape’s properties change. 
• Shapes are organized in the same way as other elements: In other words, you can 
place a shape in any of the layout containers you learned about in Chapter 3. (The 
Canvas is obviously the most useful container because it lets you place shapes at 
specific coordinates, which is important when you’re building a complex drawing 
out of multiple pieces.) 
• Shapes support the same events as other elements: That means you don’t need to 
do any extra work to deal with key presses, mouse movements, and mouse clicks. 
You can use the same set of events you’d use with any element. 
Silverlight uses a number of optimizations to make 2-D drawing as fast as possible. For example, 
because shapes often overlap in complex drawings, Silverlight uses sophisticated algorithms to 
www.it-ebooks.info
C# PDF Text Search Library: search text inside PDF file in C#.net
Add necessary references: Description: Search specified string from all the PDF pages. eg: The first page is 0. 0
adding a page to a pdf file; add page numbers pdf file
C# PDF delete text Library: delete, remove text from PDF file in
Add necessary references: RasterEdge.Imaging.Basic.dll. matchString, The string wil be deleted from PDF file, -. 0
adding page numbers to pdf in; add a page to a pdf
CHAPTER 8  SHAPES AND TRANSFORMS 
264 
determine when part of a shape won’t be visible and thereby avoid the overhead of rendering it and then 
overwriting it with another shape. 
The Shape Classes 
Every shape derives from the abstract System.Windows.Shapes.Shape class. Figure 8-1 shows the 
inheritance hierarchy for shapes. 
Figure 8-1. The Silverlight shape classes 
As you can see, a relatively small set of classes derives from the Shape class. Line, Ellipse, and 
Rectangle are all straightforward; Polyline is a connected series of straight lines; and Polygon is a closed 
shape made up of a connected series of straight lines. Finally, the Path class is an all-in-one superpower 
that can combine basic shapes in a single element. 
Although the Shape class can’t do anything on its own, it defines a small set of important properties, 
which are listed in Table 8-1. 
Table 8-1. Shape Properties 
Name 
Description 
Fill 
Sets the brush object that paints the surface of the shape (everything inside its 
borders). 
Stroke 
Sets the brush object that paints the edge of the shape (its border). 
StrokeThickness 
Sets the thickness of the border, in pixels. 
www.it-ebooks.info
C# PDF Text Highlight Library: add, delete, update PDF text
200F); annot.EndPoint = new PointF(300F, 400F); // add annotation to The string wil be highlighted from PDF file, 0
add and remove pages from pdf file online; add remove pages from pdf
C# Word - Split Word Document in C#.NET
your page number is set as 1, then the two output Word files will contains the first page and the later three pages respectively. C# DLLs: Split Word File. Add
add page numbers to pdf document; adding page numbers in pdf
CHAPTER 8  SHAPES AND TRANSFORMS 
265 
Name 
Description 
StrokeStartLineCap and 
StrokeEndLineCap 
Determine the contour of the edge of the beginning and end of the line. These 
properties have an effect only for the Line, Polyline, and (sometimes) Path 
shapes. All other shapes are closed and so have no starting and ending point. 
StrokeDashArray, 
StrokeDashOffset, and 
StrokeDashCap 
Allow you to create a dashed border around a shape. You can control the size 
and frequency of the dashes and how the edge where each dash line begins 
and ends is contoured. 
StrokeLineJoin and 
StrokeMiterLimit 
Determine the contour of the corners of a shape. Technically, these properties 
affect the vertices where different lines meet, such as the corners of a 
Rectangle element. These properties have no effect for shapes without 
corners, such as the Line and Ellipse elements. 
Stretch 
Determines how a shape fills its available space. You can use this property to 
create a shape that expands to fit its container. However, you’ll rarely set the 
Stretch property, because each shape uses the default value that makes most 
sense for it. 
GeometryTransform 
Allows you to apply a transform object that changes the coordinate system 
used to draw a shape. This lets you skew, rotate, or displace a shape. 
Transforms are particularly useful when you’re animating graphics. You’ll 
learn about transforms later in this chapter. 
Rectangle and Ellipse 
Rectangle and Ellipse are the two simplest shapes. To create either one, set the familiar Height and 
Width properties (inherited from FrameworkElement) to define the size of your shape, and then set the 
Fill or Stroke property (or both) to make the shape visible. You’re also free to use properties such as 
MinHeight, MinWidth, HorizontalAlignment, VerticalAlignment, and Margin. 
 Note  If you fail to supply a brush for the Stroke or Fill property, your shape won’t appear. 
Here’s a simple example that stacks an ellipse on a rectangle (see Figure 8-2) using a StackPanel: 
<StackPanel> 
<Ellipse Fill="Yellow" Stroke="Blue" 
Height="50" Width="100" Margin="5" HorizontalAlignment="Left"></Ellipse> 
<Rectangle Fill="Yellow" Stroke="Blue" 
Height="50" Width="100" Margin="5" HorizontalAlignment="Left"></Rectangle> 
</StackPanel> 
www.it-ebooks.info
CHAPTER 8  SHAPES AND TRANSFORMS 
266 
Figure 8-2. Two simple shapes 
The Ellipse class doesn’t add any properties. The Rectangle class adds two: RadiusX and RadiusY. 
When set to nonzero values, these properties allow you to create nicely rounded corners. 
You can think of RadiusX and RadiusY as describing an ellipse that’s used to fill in the corners of the 
rectangle. For example, if you set both properties to 10, Silverlight draws your corners using the edge of a 
circle that’s 10 pixels wide. As you make your radius larger, more of your rectangle is rounded off. If you 
increase RadiusY more than RadiusX, your corners round off more gradually along the left and right 
sides and more sharply along the top and bottom edges. If you increase the RadiusX property to match 
your rectangle’s width and increase RadiusY to match its height, you end up converting your rectangle 
into an ordinary ellipse. 
Figure 8-3 shows a few rectangles with rounded corners. 
www.it-ebooks.info
CHAPTER 8  SHAPES AND TRANSFORMS 
267 
Figure 8-3. Rounded corners 
Sizing and Placing Shapes 
As you already know, hard-coded sizes usually aren’t the ideal approach to creating user interfaces. They 
limit your ability to handle dynamic content, and they make it more difficult to localize your application 
into other languages. 
When you’re drawing shapes, these concerns don’t always apply. Often, you need tighter control 
over shape placement. However, in some cases, you can make your design a little more flexible with 
proportional sizing. Both the Ellipse and Rectangle elements have the ability to size themselves to fill the 
available space. 
If you don’t supply the Height and Width properties, the shape is sized based on its container. For 
example, you can use this stripped-down markup to create an ellipse that fills a page: 
<Grid> 
<Ellipse Fill="Yellow" Stroke="Blue"></Ellipse> 
</Grid> 
Here, the Grid contains a single proportionately sized row. The ellipse fills the entire row, the row 
fills the Grid, and the Grid fills the page. 
This sizing behavior depends on the value of the Stretch property (which is defined in the Shape 
class). By default, it’s set to Fill, which stretches a shape to fill its container if an explicit size isn’t 
indicated. Table 8-2 lists all your possibilities. 
www.it-ebooks.info
CHAPTER 8  SHAPES AND TRANSFORMS 
268 
Table 8-2. Values for the Stretch Enumeration 
Name 
Description 
Fill 
Your shape is stretched in width and height to fit its container exactly. (If you set an 
explicit height and width, this setting has no effect.) 
None 
The shape isn’t stretched. Unless you set a nonzero width and height (using the Height 
and Width or MinHeight and MinWidth properties), your shape doesn’t appear. 
Uniform 
The width and height are increased proportionately until the shape reaches the edge of 
the container. If you use this with an ellipse, you end up with the biggest circle that fits 
in the container. If you use it with a rectangle, you get the biggest possible square. (If 
you set an explicit height and width, your shape is sized within those bounds. For 
example, if you set a Width of 10 and a Height of 100 for a rectangle, you get only a 
10
10 square.) 
UniformToFill The width and height are sized proportionately until the shape fills all the available 
height and width. For example, if you place a rectangle with this Stretch setting into a 
page that’s 100
200 pixels, you get a 200
200 rectangle, and part of it is clipped off. (If 
you set an explicit height and width, your shape is sized within those bounds. For 
example, if you set a Width of 10 and a Height of 100 for a rectangle, you get a 100
100 
rectangle that’s clipped to fit a 10
100 box.) 
Figure 8-4 shows the difference between Fill, Uniform, and UniformToFill. 
www.it-ebooks.info
CHAPTER 8  SHAPES AND TRANSFORMS 
269 
Figure 8-4. Filling three cells in a Grid 
Usually, a Stretch value of Fill is the same as setting both HorizontalAlignment and 
VerticalAlignment to Stretch. The difference occurs if you choose to set a fixed Width or Height value on 
your shape. In this case, the HorizontalAlignment and VerticalAlignment values are ignored. But the 
Stretch setting still has an effect: it determines how your shape content is sized within the bounds you’ve 
given it. 
 Tip  In most cases, you’ll size a shape explicitly or allow it to stretch to fit. You won’t combine both approaches. 
So far, you’ve seen how to size a rectangle and an ellipse; but what about placing them where you 
want them? Silverlight shapes use the same layout system as any other element. However, some layout 
containers aren’t as appropriate. For example, StackPanel, DockPanel, and WrapPanel often aren’t what 
you want because they’re designed to separate elements. Grid is more flexible because it allows you to 
place as many elements as you want in the same cell (although it doesn’t let you position them in 
different parts of that cell). The ideal container is the Canvas, which forces you to specify the coordinates 
of each shape using the attached Left, Top, Right, and Bottom properties. This gives you complete 
control over how shapes overlap: 
<Canvas> 
<Ellipse Fill="Yellow" Stroke="Blue" Canvas.Left="100" Canvas.Top="50" 
www.it-ebooks.info
Documents you may be interested
Documents you may be interested