c# : winform : pdf viewer : Adding page to pdf control Library system azure .net winforms console Pro_Silverlight_5_in_CSharp_4th_edition8-part148

CHAPTER 3  LAYOUT 
68 
Table 3-3. Layout Properties 
Name 
Description 
HorizontalAlignment 
This property determines how a child is positioned inside a layout 
container when there’s extra horizontal space available. You can choose 
Center, Left, Right, or Stretch. 
VerticalAlignment 
This one determines how a child is positioned inside a layout container 
when there’s extra vertical space available. You can choose Center, Top, 
Bottom, or Stretch. 
Margin 
Use Margin to add a bit of breathing room around an element. The 
Margin property holds an instance of the System.Windows.Thickness 
structure, with separate components for the top, bottom, left, and right 
edges. 
MinWidth and MinHeight 
These properties set the minimum dimensions of an element. If an 
element is too large for its layout container, it will be cropped to fit. 
MaxWidth and MaxHeight 
These two properties set the maximum dimensions of an element. If the 
container has more room available, the element won’t be enlarged 
beyond these bounds, even if the HorizontalAlignment and 
VerticalAlignment properties are set to Stretch. 
Width and Height 
Use these properties to explicitly set the size of an element. This setting 
overrides a Stretch value for the HorizontalAlignment and 
VerticalAlignment properties. However, this size won’t be honored if it’s 
outside of the bounds set by the MinWidth, MinHeight, MaxWidth, and 
MaxHeight. 
All of these properties are inherited from the base FrameworkElement class and are therefore 
supported by all the graphical widgets you can use in a Silverlight page. 
 Note  As you learned in Chapter 2, different layout containers can provide attached properties to their children. 
For example, all the children of a Grid object gain Row and Column properties that allow them to choose the cell 
where they’re placed. Attached properties allow you to set information that’s specific to a particular layout 
container. However, the layout properties in Table 3-3 are generic enough that they apply to many layout panels. 
Thus, these properties are defined as part of the base FrameworkElement class. 
www.it-ebooks.info
Adding page 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
add page numbers to pdf preview; adding page numbers pdf
Adding page 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 contents page to pdf; add page numbers to pdf document
CHAPTER 3  LAYOUT 
69 
Alignment 
To understand how these properties work, take another look at the simple StackPanel shown in Figure 3-
3. In this example—a StackPanel with vertical orientation—the VerticalAlignment property has no effect 
because each element is given as much height as it needs and no more. However, the 
HorizontalAlignment is important. It determines where each element is placed in its row. 
Ordinarily, the default HorizontalAlignment is Left for a label and Stretch for a Button. That’s why 
every button takes the full column width. However, you can change these details: 
<StackPanel Background="White"> 
<TextBlock HorizontalAlignment="Center" Text="A Button Stack"></TextBlock
<Button HorizontalAlignment="Left" Content="Button 1"></Button
<Button HorizontalAlignment="Right" Content="Button 2"></Button
<Button Content="Button 3"></Button
<Button Content="Button 4"></Button
</StackPanel
Figure 3-5 shows the result. The first two buttons are given their minimum sizes and aligned 
accordingly, while the bottom two buttons are stretched over the entire StackPanel. If you resize the 
page, you’ll see that the label remains in the middle and the first two buttons stay stuck to either side. 
Figure 3-5. A StackPanel with aligned buttons 
 Note  The StackPanel also has its own HorizontalAlignment and VerticalAlignment properties. By default, both of 
these are set to Stretch, and so the StackPanel fills its container completely. In this example, that means the 
StackPanel fills the page. If you use a different value for VerticalAlignment, the StackPanel will be made just large 
enough to fit the widest control. 
www.it-ebooks.info
VB.NET PDF Library SDK to view, edit, convert, process PDF file
Perform annotation capabilities to mark, draw, and visualize objects on PDF document page. Capable of adding PDF file navigation features to your VB.NET program
add page to a pdf; add a page to a pdf
C# PDF insert image Library: insert images into PDF in C#.net, ASP
image adding library control for PDF document, you can easily and quickly add an image, picture or logo to any position of specified PDF document file page.
add page numbers to pdf document in preview; add remove pages from pdf
CHAPTER 3  LAYOUT 
70 
Margins 
There’s an obvious problem with the StackPanel example in its current form. A well-designed page 
doesn’t just contain elements—it also includes a bit of extra space in between the elements. To 
introduce this extra space and make the StackPanel example less cramped, you can set control margins. 
When setting margins, you can set a single width for all sides, like this: 
<Button Margin="5" Content="Button 3"></Button> 
Alternatively, you can set different margins for each side of a control in the order left, top, right, 
bottom
<Button Margin="5,10,5,10" Content="Button 3"></Button> 
In code, you can set margins using the Thickness structure: 
cmd.Margin = new Thickness(5); 
Getting the right control margins is a bit of an art, because you need to consider how the margin 
settings of adjacent controls influence one another. For example, if you have two buttons stacked on top 
of each other and the topmost button has a bottom margin of 5 and the bottommost button has a top 
margin of 5, you have a total of 10 pixels of space between the two buttons. 
Ideally, you’ll be able to keep different margin settings as consistent as possible and avoid setting 
distinct values for the different margin sides. For instance, in the StackPanel example, it makes sense to 
use the same margins on the buttons and on the panel itself, as shown here: 
<StackPanel Margin="3" Background="White"> 
<TextBlock Margin="3" HorizontalAlignment="Center" 
Text="A Button Stack"></TextBlock> 
<Button Margin="3" HorizontalAlignment="Left" Content="Button 1"></Button> 
<Button Margin="3" HorizontalAlignment="Right" Content="Button 2"></Button> 
<Button Margin="3" Content="Button 3"></Button> 
<Button Margin="3" Content="Button 4"></Button> 
</StackPanel> 
This way, the total space between two buttons (the sum of the two button margins) is the same as 
the total space between the button at the edge of the page (the sum of the button margin and the 
StackPanel margin). Figure 3-6 shows this more respectable page, and Figure 3-7 shows how the margin 
settings break down. 
www.it-ebooks.info
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
page modifying page, you will find detailed guidance on creating, loading, merge and splitting PDF pages and Files, adding a page into PDF document, deleting
add pdf pages to word; add page to pdf preview
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
Provides you with examples for adding an (empty) page to a PDF and adding empty pages to a PDF from a supported file format, with customized options.
adding pages to a pdf document in preview; adding page numbers pdf file
CHAPTER 3  LAYOUT 
71 
Figure 3-6. Adding margins between elements 
Figure 3-7. How margins are combined 
www.it-ebooks.info
C# PDF insert text Library: insert text into PDF content in C#.net
C#.NET PDF SDK - Insert Text to PDF Document in C#.NET. Providing C# Demo Code for Adding and Inserting Text to PDF File Page with .NET PDF Library.
add pages to pdf reader; adding a page to a pdf in reader
VB.NET PDF insert text library: insert text into PDF content in vb
VB.NET PDF - Insert Text to PDF Document in VB.NET. Providing Demo Code for Adding and Inserting Text to PDF File Page in VB.NET Program.
add a blank page to a pdf; add pages to an existing pdf
CHAPTER 3  LAYOUT 
72 
Minimum, Maximum, and Explicit Sizes 
Finally, every element includes Height and Width properties that allow you to give it an explicit size. 
However, just because you can set explicit sizes doesn’t mean you should. In most cases, it’s better to let 
elements grow to fit their content. For example, a button expands as you add more text. You can lock 
your elements into a range of acceptable sizes by setting a maximum and minimum size, if necessary. If 
you do add size information, you risk creating a more brittle layout that can’t adapt to changes and (at 
worst) truncates content that doesn’t fit. 
For example, you might decide that the buttons in your StackPanel should stretch to fit the 
StackPanel but be made no larger than 200 pixels wide and no smaller than 100 pixels wide. (By default, 
buttons start with a minimum width of 75 pixels.) Here’s the markup you need: 
<StackPanel Margin="3"> 
<TextBlock Margin="3" HorizontalAlignment="Center" 
Text="A Button Stack"></TextBlock> 
<Button Margin="3" MaxWidth="300" MinWidth="200" Content="Button 1"></Button> 
<Button Margin="3" MaxWidth="300" MinWidth="200" Content="Button 2"></Button> 
<Button Margin="3" MaxWidth="300" MinWidth="200" Content="Button 3"></Button> 
<Button Margin="3" MaxWidth="300" MinWidth="200" Content="Button 4"></Button> 
</StackPanel> 
 Tip  At this point, you might be wondering if there’s an easier way to set properties that are standardized across 
several elements, such as the button margins in this example. The answer is styles—a feature that allows you to 
reuse property settings. You’ll learn about styles in Chapter 14. 
When the StackPanel sizes a button that doesn’t have a hard-coded size, it considers several pieces 
of information: 
• The minimum size: Each button will always be at least as large as the minimum 
size. 
• The maximum size: Each button will always be smaller than the maximum size 
(unless you’ve incorrectly set the maximum size to be smaller than the minimum 
size). 
• The content: If the content inside the button requires a greater width, the 
StackPanel will attempt to enlarge the button. 
• The size of the container: If the minimum width is larger than the width of the 
StackPanel, a portion of the button will be cut off. But if the minimum width isn’t 
set (or is less than the width of the StackPanel), the button will not be allowed to 
grow wider than the StackPanel, even if it can’t fit all its text on the button surface. 
• The horizontal alignment: Because the button uses a HorizontalAlignment of 
Stretch (the default), the StackPanel will attempt to enlarge the button to fill the 
full width of the StackPanel. 
www.it-ebooks.info
C# PDF Annotate Library: Draw, edit PDF annotation, markups in C#.
text comments on PDF page using C# demo code in Visual Stuodio .NET class. C#.NET: Add Text Box to PDF Document. Provide users with examples for adding text box
add pages to pdf without acrobat; adding page numbers to pdf in reader
C# PDF Library SDK to view, edit, convert, process PDF file for C#
Capable of adding PDF file navigation features to your C# program. Perform annotation capabilities to mark, draw, and visualize objects on PDF document page.
add page number to pdf; add blank page to pdf preview
CHAPTER 3  LAYOUT 
73 
The trick to understanding this process is to realize that the minimum and maximum size set the 
absolute bounds. Within those bounds, the StackPanel tries to respect the button’s desired size (to fit its 
content) and its alignment settings. 
Figure 3-8 sheds some light on how this works with the StackPanel. On the left is the page at its 
minimum size. The buttons are 200 pixels each, and the page cannot be resized to be narrower. If you 
shrink the page from this point, the right side of each button will be clipped off. (You can deal with this 
situation using scrolling, as discussed later in this chapter.) 
As you enlarge the page, the buttons grow with it until they reach their maximum of 300 pixels. 
From this point on, if you make the page any larger, the extra space is added to either side of the button 
(as shown on the right in Figure 3-8). 
Figure 3-8. Constrained button sizing 
 Note  In some situations, you might want to use code that checks how large an element is in a page. The Height 
and Width proper 
the actual rende
Width properties won’t be set at all. However, you can find out the actual size used to render an element by 
reading the ActualHeight and ActualWidth properties. But remember, these values may change when the page is 
resized or the content inside it changes. 
www.it-ebooks.info
CHAPTER 3  LAYOUT 
74 
The WrapPanel and DockPanel 
Obviously, the StackPanel alone can’t help you create a realistic user interface. To complete the picture, 
the StackPanel needs to work with other more capable layout containers. Only then can you assemble a 
complete window. 
The most sophisticated layout container is the Grid, which you’ll consider later in this chapter. But 
first, it’s worth looking at the WrapPanel and DockPanel, which are two simple layout containers that are 
available as part of the Silverlight Toolkit. Both complement the StackPanel by offering different layout 
behavior. 
To use the WrapPanel or the DockPanel, you need to add a reference to the 
System.Windows.Controls.Toolkit.dll assembly where they are defined. To get this assembly, you must 
install the Silverlight Toolkit, which is available at http://silverlight.codeplex.com. 
Once you’ve added the assembly reference, you need to map the namespace so it’s available in your 
markup, as shown here: 
<UserControl x:Class="Layout.WrapAndDock" ... 
xmlns:toolkit= 
You can now define the WrapPanel and DockPanel using the namespace prefix toolkit
<toolkit:WrapPanel ...></toolkit:WrapPanel> 
You can skip a few steps by adding the WrapPanel from the Toolbox. Visual Studio will then add the 
appropriate assembly reference, map the namespace, and insert the XML markup for the control. 
The WrapPanel 
The WrapPanel lays out controls in the available space, one line or column at a time. By default, the 
WrapPanel.Orientation property is set to Horizontal; controls are arranged from left to right and then on 
subsequent rows. However, you can use Vertical to place elements in multiple columns. 
 Tip  Like the 
interface, not complete window layouts. For example, you might use a WrapPanel to keep together the buttons in a 
toolbar-like control. 
Here’s an example that defines a series of buttons with different alignments and places them into 
the WrapPanel: 
<toolkit:WrapPanel Margin="3"> 
<Button VerticalAlignment="Top" Content="Top Button"></Button> 
<Button MinHeight="60" Content="Tall Button"></Button> 
<Button VerticalAlignment="Bottom" Content="Bottom Button"></Button> 
<Button Content="Stretch Button"></Button> 
<Button VerticalAlignment="Center" Content="Centered Button"></Button>    
</toolkit:WrapPanel> 
www.it-ebooks.info
CHAPTER 3  LAYOUT 
75 
Figure 3-9 shows how the buttons are wrapped to fit the current size of the WrapPanel (which is 
determined by the size of the control that contains it). As this example demonstrates, a WrapPanel in 
horizontal mode creates a series of imaginary rows, each of which is given the height of the tallest 
contained element. Other controls may be stretched to fit or aligned according to the VerticalAlignment 
property. In the example on the left in Figure 3-9, all the buttons fit into one tall row and are stretched or 
aligned to fit. In the example on the right, several buttons have been bumped to the second row. Because 
the second row does not include an unusually tall button, the row height is kept at the minimum button 
height. As a result, it doesn’t matter what VerticalAlignment setting the various buttons in this row use. 
Figure 3-9. Wrapped buttons 
 Note  The WrapPanel is the only one of the five Silverlight layout containers whose effects can’t be duplicated 
with a crafty use of the Grid. 
The DockPanel 
The Silverlight Toolkit also includes a layout container called the DockPanel. It stretches controls against 
one of its outside edges. The easiest way to visualize this is to think of the toolbars that sit at the top of 
many Windows applications. These toolbars are docked to the top of the window. As with the 
StackPanel, docked elements get to choose one aspect of their layout. For example, if you dock a button 
to the top of a DockPanel, it’s stretched across the entire width of the DockPanel but given whatever 
height it requires (based on the content and the MinHeight property). On the other hand, if you dock a 
button to the left side of a container, its height is stretched to fit the container, but its width is free to 
grow as needed.  
The obvious question is this: How do child elements choose the side where they want to dock? The 
answer is through an attached property named Dock, which can be set to Left, Right, Top, or Bottom. 
Every element that’s placed inside a DockPanel automatically acquires this property. 
Here’s an example that puts one button on every side of a DockPanel: 
www.it-ebooks.info
CHAPTER 3  LAYOUT 
76 
<toolkit:DockPanel LastChildFill="True"> 
<Button toolkit:DockPanel.Dock="Top" Content="Top Button"></Button> 
<Button toolkit:DockPanel.Dock="Bottom" Content="Bottom Button"></Button> 
<Button toolkit:DockPanel.Dock="Left" Content="Left Button"></Button> 
<Button toolkit:DockPanel.Dock="Right" Content="Right Button"></Button> 
<Button Content="Remaining Space"></Button> 
</toolkit:DockPanel> 
This example also sets the LastChildFill to true, which tells the DockPanel to give the remaining 
space to the last element. Figure 3-10 shows the result. 
Figure 3-10. Docking to every side 
Clearly, when docking controls, the order is important. In this example, the top and bottom buttons 
get the full edge of the DockPanel because they’re docked first. When the left and right buttons are 
docked next, they fit between these two buttons. If you reversed this order, the left and right buttons 
would get the full sides, and the top and bottom buttons would become narrower, because they’d be 
docked between the two side buttons. 
You can dock several elements against the same side. In this case, the elements simply stack up 
against the side in the order they’re declared in your markup. And, if you don’t like the spacing or the 
stretch behavior, you can tweak the Margin, HorizontalAlignment, and VerticalAlignment properties, 
just as you did with the StackPanel. Here’s a modified version of the previous example that 
demonstrates: 
<toolkit:DockPanel LastChildFill="True"> 
<Button toolkit:DockPanel.Dock="Top" Content="A Stretched Top Button"></Button> 
<Button toolkit:DockPanel.Dock="Top" HorizontalAlignment="Center" 
Content="A Centered Top Button"></Button> 
<Button toolkit:DockPanel.Dock="Top" HorizontalAlignment="Left" 
Content="A Left-Aligned Top Button"></Button> 
www.it-ebooks.info
CHAPTER 3  LAYOUT 
77 
<Button toolkit:DockPanel.Dock="Bottom" Content="Bottom Button"></Button> 
<Button toolkit:DockPanel.Dock="Left" Content="Left Button"></Button> 
<Button toolkit:DockPanel.Dock="Right" Content="Right Button"></Button> 
<Button Content="Remaining Space"></Button> 
</toolkit:DockPanel> 
The docking behavior is still the same. First, the top buttons are docked, then the bottom button is 
docked, and finally the remaining space is divided between the side buttons and a final button in the 
middle. Figure 3-11 shows the resulting window. 
Figure 3-11. Docking multiple elements to the top 
The Grid 
The Grid is the most powerful layout container in Silverlight. In fact, the Grid is so useful that when you 
add a new XAML document for a page in Visual Studio, it automatically adds the Grid tags as the first-
level container, nested inside the root UserControl element. 
The Grid separates elements into an invisible grid of rows and columns. Although more than one 
element can be placed in a single cell (in which case they overlap), it generally makes sense to place just 
a single element per cell. Of course, that element may itself be another layout container that organizes 
its own group of contained controls. 
 Tip   to true to take a 
closer look. This feature isn’t really intended for prettying up a page. Instead, it’s a debugging convenience that’s 
designed to help you understand how the Grid has subdivided itself into smaller regions. This feature is important 
dths and row heights. 
www.it-ebooks.info
Documents you may be interested
Documents you may be interested