c# : winform : pdf viewer : Add page numbers to pdf document application software utility html winforms wpf visual studio Pro_Silverlight_5_in_CSharp_4th_edition76-part144

CHAPTER 20  DATA BINDING 
759 
that let you configure this behavior. For example, you may introduce a Boolean SuppressExceptions 
property. If it’s set to true, you can catch exceptions in the Convert() method and return an empty string. 
Or, you can add a DefaultImage property that takes a placeholder BitmapImage. ImagePathConverter 
can then return the default image if an exception occurs. 
Applying Conditional Formatting 
Some of the most interesting value converters aren’t designed to format data for presentation. Instead, 
they’re intended to format some other appearance-related aspect of an element based on a data rule. 
For example, imagine that you want to flag high-priced items by giving them a different background 
color. You can easily encapsulate this logic with the following value converter: 
public class PriceToBackgroundConverter IValueConverter 
public double MinimumPriceToHighlight 
getset
public Brush HighlightBrush 
getset
public Brush DefaultBrush 
getset
public object Convert(object value, Type targetType, object parameter, 
System.Globalization.CultureInfo culture) 
double price = (double)value; 
if (price >= MinimumPriceToHighlight) 
return HighlightBrush; 
else 
return DefaultBrush; 
public object ConvertBack(object value, Type targetType, object parameter, 
System.Globalization.CultureInfo culture) 
throw new NotSupportedException(); 
 TipBinding.UnsetValue to tell 
Silverlight to ignore your binding. The bound property (in this case, Background) will keep its default value. 
www.it-ebooks.info
Add page numbers to pdf document - 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 pdf in preview; add page to pdf
Add page numbers to pdf document - 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 document to pdf pages; add blank page to pdf
CHAPTER 20  DATA BINDING 
760 
Once again, the value converter is carefully designed with reusability in mind. Rather than hard-
coding the color highlights in the converter, they’re specified in the XAML by the code that uses the 
converter: 
<local:PriceToBackgroundConverter x:Key="PriceToBackgroundConverter" 
DefaultBrush="{x:Null}" HighlightBrush="Orange" MinimumPriceToHighlight="50"> 
</local:PriceToBackgroundConverter
Brushes are used instead of colors so that you can create more advanced highlight effects using 
gradients and background images. And if you want to keep the standard, transparent background (so the 
background of the parent elements is used), set the DefaultBrush or HighlightBrush property to null, as 
shown here. 
All that’s left is to use this converter to set the background of an element, such as the border that 
contains all the other elements: 
<Border Background
"{Binding UnitCostConverter={StaticResource PriceToBackgroundConverter}}" 
... 
In many cases, you’ll need to pass information to a converter beyond the data you want to convert. 
In this example, PriceToBackgroundConverter needs to know the highlight color and minimum price 
details, and this information is passed along through properties. However, you have one other 
alternative. You can pass a single object (of any type) to a converter through the binding expression, by 
setting the ConverterParameter property. Here’s an example that uses this approach to supply the 
minimum price: 
<Border Background
"{Binding UnitCostConverter={StaticResource PriceToBackgroundConverter}, 
ConverterParameter=50}" 
... 
The parameter is passed as an argument to the Convert() method. Here’s how you can rewrite the 
earlier example to use it: 
public object Convert(object value, Type targetType, object parameter, 
System.Globalization.CultureInfo culture) 
double price = (double)value; 
if (price >= Double.Parse(parameter)) 
return HighlightBrush; 
else 
return DefaultBrush; 
In general, the property-based approach is preferred. It’s clearer, more flexible, and strongly typed. 
(When set in the markup extension, ConverterParameter is always treated as a string.) But in some 
situations, you may want to reuse a single value converter for multiple elements, and you may need to 
vary a single detail for each element. In this situation, it’s more efficient to use ConverterParameter than 
to create multiple copies of the value converter. 
Data Templates 
data template is a chunk of XAML markup that defines how a bound data object should be displayed. 
Two types of controls support data templates: 
www.it-ebooks.info
C# Create PDF Library SDK to convert PDF from other file formats
offer them the ability to count the page numbers of generated document in C#.NET using this PDF document creating toolkit, if you need to add some text
add multi page pdf to word document; adding page numbers to pdf documents
C# Word - Word Create or Build in C#.NET
also offer them the ability to count the page numbers of generated using this Word document adding control, you can add some additional Create Word From PDF.
add and delete pages in pdf; add page numbers to a pdf
CHAPTER 20  DATA BINDING 
761 
• Content controls support data templates through the ContentTemplate property. 
The content template is used to display whatever you’ve placed in the Content 
property. 
• List controls (controls that derive from ItemsControl) support data templates 
through the ItemTemplate property. This template is used to display each item 
from the collection (or each row from a DataTable) that you’ve supplied as the 
ItemsSource. 
The list-based template feature is based on content control templates: each item in a list is wrapped 
by a content control, such as ListBoxItem for the ListBox, ComboBoxItem for the ComboBox, and so on. 
Whatever template you specify for the ItemTemplate property of the list is used as the ContentTemplate 
of each item in the list. 
What can you put inside a data template? It’s simple. A data template is an ordinary block of XAML 
markup. Like any other block of XAML markup, the template can include any combination of elements. 
It should also include one or more data-binding expressions that pull out the information that you want 
to display. (After all, if you don’t include any data-binding expressions, each item in the list will appear 
the same, which isn’t very helpful.) 
The best way to see how a data template works is to start with a basic list that doesn’t use a 
template. For example, consider this list box, which was shown previously: 
<ListBox Name="lstProducts" DisplayMemberPath="ModelName"></ListBox> 
You can get the same effect with this list box that uses a data template: 
<ListBox Name="lstProducts"> 
<ListBox.ItemTemplate> 
<DataTemplate> 
<TextBlock Text="{Binding ModelName}"></TextBlock> 
</DataTemplate> 
</ListBox.ItemTemplate> 
</ListBox> 
When you bind the list to the collection of products (by setting the ItemsSource property), a single 
ListBoxItem is created for each Product object. The ListBoxItem.Content property is set to the 
appropriate Product object, and the ListBoxItem.ContentTemplate is set to the data template shown 
earlier, which extracts the value from the Product.ModelName property and displays it in a TextBlock. 
So far, the results are underwhelming. But now that you’ve switched to a data template, there’s no 
limit to how you can creatively present your data. Here’s an example that wraps each item in a rounded 
border, shows two pieces of information, and uses bold formatting to highlight the model number: 
<ListBox Name="lstProducts" HorizontalContentAlignment="Stretch" 
SelectionChanged="lstProducts_SelectionChanged"> 
<ListBox.ItemTemplate> 
<DataTemplate> 
<Border Margin="5" BorderThickness="1" BorderBrush="SteelBlue" 
CornerRadius="4"> 
<Grid Margin="3"> 
<Grid.RowDefinitions> 
<RowDefinition></RowDefinition> 
<RowDefinition></RowDefinition> 
</Grid.RowDefinitions> 
<TextBlock FontWeight="Bold" 
Text="{Binding ModelNumber}"></TextBlock> 
www.it-ebooks.info
C# PowerPoint - PowerPoint Creating in C#.NET
offer them the ability to count the page numbers of generated in C#.NET using this PowerPoint document creating toolkit, if you need to add some text
adding page numbers to pdf; adding pages to a pdf document in preview
C# Word - Word Creating in C#.NET
offer them the ability to count the page numbers of generated document in C#.NET using this Word document creating toolkit, if you need to add some text
adding page numbers pdf; add pages to pdf online
CHAPTER 20  DATA BINDING 
762 
<TextBlock Grid.Row="1" 
Text="{Binding ModelName}"></TextBlock> 
</Grid> 
</Border> 
</DataTemplate> 
</ListBox.ItemTemplate> 
</ListBox> 
When this list is bound, a separate Border object is created for each product. Inside the Border 
element is a Grid with two pieces of information, as shown in Figure 20-14. 
Figure 20-14. A list that uses a data template 
Separating and Reusing Templates 
Like styles, templates are often declared as a page or application resource rather than defined in the list 
where you use them. This separation is often clearer, especially if you use long, complex templates or 
multiple templates in the same control (as described in the next section). It also gives you the ability to 
reuse your templates in more than one list or content control if you want to present your data the same 
way in different places in your user interface. 
To make this work, all you need to do is to define your data template in a resources collection and 
give it a key name. Here’s an example that extracts the template shown in the previous example: 
<UserControl.Resources> 
www.it-ebooks.info
VB.NET TIFF: VB.NET Sample Codes to Sort TIFF File with .NET
manipulating multi-page TIFF (Tagged Image File), PDF, Microsoft Office If you want to add barcode into a TIFF a multi-page TIFF file with page numbers using VB
add pages to pdf file; add page to pdf preview
C# Excel: Create and Draw Linear and 2D Barcodes on Excel Page
can also load document like PDF, TIFF, Word get the first page BasePage page = doc.GetPage REImage barcodeImage = linearBarcode.ToImage(); // add barcode image
add page number to pdf; add page number pdf file
CHAPTER 20  DATA BINDING 
763 
<DataTemplate x:Key="ProductDataTemplate"> 
<Border Margin="5" BorderThickness="1" BorderBrush="SteelBlue" 
CornerRadius="4"> 
<Grid Margin="3"> 
<Grid.RowDefinitions> 
<RowDefinition></RowDefinition> 
<RowDefinition></RowDefinition> 
</Grid.RowDefinitions> 
<TextBlock FontWeight="Bold" 
Text="{Binding ModelNumber}"></TextBlock> 
<TextBlock Grid.Row="1" 
Text="{Binding ModelName}"></TextBlock> 
</Grid> 
</Border> 
</DataTemplate> 
</UserControl.Resources> 
Now you can use your data template using a StaticResource reference: 
<ListBox Name="lstProducts" HorizontalContentAlignment="Stretch" 
ItemTemplate="{StaticResource ProductDataTemplate}" 
SelectionChanged="lstProducts_SelectionChanged"></ListBox> 
 Note  Data templates don’t require data binding. In other words, you don’t need to use the ItemsSource property 
to fill a template list. In the previous examples, you’re free to add Product objects declaratively (in your XAML 
markup) or programmatically (by calling the ListBox.Items.Add() method). In both cases, the data template works 
the same way. 
Implicit Data Templates 
In the previous examples, the template is set explicitly, using the ItemTemplate property of a list control. 
However, Silverlight provides another option, called implicit templates. With implicit templates, you 
define a data template for a specific type of data—for example, you might create a data template that’s 
designed to present Product objects. Your list control then picks the right data template automatically. 
You can see this technique in action with a simple modification of the previous example. First, you 
remove the ItemTemplate property from the ListBox control: 
<ListBox Name="lstProducts" HorizontalContentAlignment="Stretch" 
SelectionChanged="lstProducts_SelectionChanged"></ListBox> 
Then, you change the way your data template as defined in the resource collection. In this case, you 
need to remove the key name and add the DataType property, as shown here: 
<UserControl.Resources> 
<DataTemplate DataType="local:Product"> 
... 
</DataTemplate> 
</UserControl.Resources> 
www.it-ebooks.info
C# Excel - Excel Creating in C#.NET
also offer them the ability to count the page numbers of generated in C#.NET using this Excel document creating toolkit, if you need to add some text
add a page to a pdf online; add page number to pdf hyperlink
VB.NET Image: Guide to Convert Images to Stream with DocImage SDK
Follow this guiding page to learn how to easily convert a single image or numbers of it an image processing component which can enable developers to add a wide
add page numbers to a pdf in preview; adding page numbers to a pdf document
CHAPTER 20  DATA BINDING 
764 
Of course, this assumes you’ve defined an XML namespace that maps the local prefix to the 
namespace that contains your Product class, like this: 
<UserControl xmlns:local="clr-namespace:DataBinding.DataService" ... > 
Remarkably, this is all you need to make implicit templates work. When you fill the list with Product 
objects, the ListBox control will realize that there’s a suitable data template and use it automatically. 
In this example, implicit templates don’t have many benefits (or disadvantages). But here are two 
more specialized ways that you can use them: 
• As a shortcut for the same data in different places: If you have to use the same data 
template with different controls, it may be easier to define that template once, as 
an application resource. All your bound controls will then grab that template 
automatically. 
• To create lists with multiple templates: If you have a data source with more than 
one type of object, you can give each type a different implicit template. 
The second scenario is particularly interesting. For example, imagine you have a list of Product 
objects, which includes some objects that derive from Product (say, SalesProduct, ExportProduct, or 
RestrictedProduct). You can then give each of these classes a separate implicit template. Your bound 
controls will use the right template for the corresponding class—even if they need to mix and match 
different templates in the same list. This saves you the trouble of writing one super-complicated data 
template that attempts to handle everything. 
More Advanced Templates 
Data templates can be remarkably self-sufficient. Along with basic elements such as TextBlock and data-
binding expressions, they can also use more sophisticated controls, attach event handlers, convert data 
to different representations, use animations, and so on. 
You can use a value converter in your binding expressions to convert your data to a more useful 
representation. Consider, for example, the ImagePathConverter demonstrated earlier. It accepts a 
picture file name and uses it to create a BitmapImage object with the corresponding image content. This 
BitmapImage object can then be bound directly to the Image element. 
You can use the ImagePathConverter to build the following data template that displays the image 
for each product: 
<UserControl.Resources> 
<local:ImagePathConverter x:Key="ImagePathConverter"></local:ImagePathConverter> 
<DataTemplate x:Key="ProductDataTemplate"> 
<Border Margin="5" BorderThickness="1" BorderBrush="SteelBlue" 
CornerRadius="4"> 
<Grid Margin="3"> 
<Grid.RowDefinitions> 
<RowDefinition></RowDefinition> 
<RowDefinition></RowDefinition> 
<RowDefinition></RowDefinition> 
</Grid.RowDefinitions> 
<TextBlock FontWeight="Bold" Text="{Binding Path=ModelNumber}"></TextBlock> 
<TextBlock Grid.Row="1" Text="{Binding Path=ModelName}"></TextBlock> 
<Image Grid.Row="2" Grid.RowSpan="2" Source= 
"{Binding Path=ProductImagePath, Converter={StaticResource ImagePathConverter}}"> 
</Image> 
www.it-ebooks.info
C# Word: How to Use C# Code to Print Word Document for .NET
are also available within C# Word Printer Add-on , like pages at one paper, setting the page copy numbers to be C# Class Code to Print Certain Page(s) of Word.
add and remove pages from a pdf; adding page to pdf in preview
C#: Use XImage.OCR to Recognize MICR E-13B, OCR-A, OCR-B Fonts
may need to scan and get check characters like numbers and codes. page.RecSettings. LanguagesEnabled.Add(Language.Other); page.RecSettings.OtherLanguage
adding page numbers in pdf file; add page numbers to pdf preview
CHAPTER 20  DATA BINDING 
765 
</Grid> 
</Border> 
</DataTemplate> 
</UserControl.Resources> 
Although this markup doesn’t involve anything exotic, the result is a much more interesting list (see 
Figure 20-15). 
Figure 20-15. A list with image content 
 Note  If there is an error in your template, you don’t receive an exception. Instead, the control is unable to 
a-binding debugging feature 
described earlier in this chapter. 
www.it-ebooks.info
CHAPTER 20  DATA BINDING 
766 
Changing Item Layout 
Data templates give you remarkable control over every aspect of item presentation. However, they don’t 
allow you to change how the items are organized with respect to each other. No matter what templates 
and styles you use, the list box puts each item into a separate horizontal row and stacks each row to 
create the list. 
You can change this layout by replacing the container that the list uses to lay out its children. To do 
so, you set the ItemsPanel property with a block of XAML that defines the panel you want to use. This 
panel can be any class that derives from System.Windows.Controls.Panel, including a custom layout 
container that implements your own specialized layout logic. 
The following uses the WrapPanel from the Silverlight Toolkit (http://silverlight.codeplex.com), 
which was described in Chapter 3. It arranges items from left to right over multiple rows: 
<ListBox Margin="7,3,7,10" Name="lstProducts" 
ItemTemplate="{StaticResource ProductDataTemplate}"> 
<ListBox.ItemsPanel> 
<ItemsPanelTemplate> 
<controlsToolkit:WrapPanel></controlsToolkit:WrapPanel> 
</ItemsPanelTemplate> 
</ListBox.ItemsPanel> 
</ListBox> 
Figure 20-16 shows the result. 
Figure 20-16. Tiling a list 
www.it-ebooks.info
CHAPTER 20  DATA BINDING 
767 
The Last Word 
This chapter took a thorough look at data binding. You learned how to create data-binding expressions 
that draw information from custom objects, use change notification and validation, bind entire 
collections of data, and get your records from a web service. You also explored a range of techniques you 
can use to customize the display of your data, from data conversion and conditional formatting with 
IValueConverter to data templates and custom layout. 
In the next chapter, you’ll build on these concepts as you take a deeper look into validation and 
consider rich data controls like the DataGrid, DataForm, and TreeView. 
www.it-ebooks.info
C H A P T E R  21 
769 
Data Controls 
So far, you’ve learned how to use data binding to pull information out of data objects, format it, and 
make it available for editing. However, although data binding is a flexible and powerful system, getting 
the result you want can still take a lot of work. For example, a typical data form needs to bind a number 
of different properties to different controls, arrange them in a meaningful way, and use the appropriate 
converters, templates, and validation logic. Creating these ingredients is as time-consuming as any other 
type of UI design. 
Silverlight offers several features that can help offload some of the work: 
• The Label and DescriptionViewer controls: They pull metadata out of your data 
objects and display it in your pages—automatically. 
• Data annotations: Originally introduced with ASP.NET Dynamic Data, they let you 
embed validation rules in your data classes. Pair data annotations with the 
ValidationSummary control for an easy way to list all the validation errors in a 
page. 
• The DataGrid control: It’s the centerpiece of Silverlight’s rich data support—a 
highly customizable table of rows and columns with support for sorting, editing, 
grouping, and (with the help of the DataPager) paging. 
• The TreeView control: Silverlight’s hierarchical tree isn’t limited to data binding 
and doesn’t support editing. However, it’s a true time-saver when dealing with 
hierarchical data, such as a list of categories with nested lists of products. 
• The PivotViewer control: Silverlight’s strangest data control is a fancy slice-and-
dice data visualizer with built-in animations. Its highly specialized nature means it 
isn’t suited for most applications, but those who can use it will enjoy high-level 
features without the low-level coding. 
In this chapter, you’ll learn how to extend the data-binding basics you picked up in the previous 
chapter. You’ll also learn how to pass your smart data objects across the great web service divide so that 
the same metadata and validation logic is available to your server-side ASP.NET code and your client-
side Silverlight applications. 
www.it-ebooks.info
Documents you may be interested
Documents you may be interested