Prerequisite Knowledge DataGrid Fundamentals: Styles, Printing, Exporting to XPS, and Using Print Preview Advanced Concepts: Templates |
To provide a new page style, a new Style whose TargetType property is set to DataGridPageControl must be assigned to the PageStyle property (see Example). To change the layout of a page, a new ControlTemplate that has a DataGridPageControl as its target type must be provided. In this template, various panels must be added and identified as the page-headers host, page-footers host, and grid host regions by setting the corresponding PrintViewBase attached properties (see Table 1 in Printing and Exporting).
Table 1: Host attached properties
Host attached property | Description |
---|---|
IsPageHeadersHost attached property | Identifies a panel as being the host that will contain all elements added to a page's headers through the PageHeaders property. |
IsPageFootersHost attached property | Identifies a panel as being the host that will contain all elements added to a page's footers through the PageFooters property. |
IsDataGridHost attached property | Identifies a Decorator as being the host that will contain a grid. |
All examples in this topic assume that the grid is bound to the Employees table of the Northwind database, unless stated otherwise.
Example 1: Styling a page
The following example demonstrates how to create a style to change the layout of the printed pages by providing a new ControlTemplate that will place the page headers and footers at the top of each page and display an orange border around the area where the grid is printed.
The Print method will be called in the button's Click event, whose implementation is provided below.
XAML |
Copy Code |
---|---|
<Grid xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid" xmlns:local="clr-namespace:Xceed.Wpf.Documentation"> <Grid.Resources> <xcdg:DataGridCollectionViewSource x:Key="cvs_employees" Source="{Binding Source={x:Static Application.Current}, Path=Employees}"/> <Style x:Key="page_style" TargetType="{x:Type xcdg:DataGridPageControl}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type xcdg:DataGridPageControl}"> <DockPanel> <StackPanel xcdg:DataGridPageControl.IsPageHeadersHost="True" DockPanel.Dock="Top"/> <StackPanel xcdg:DataGridPageControl.IsPageFootersHost="True" DockPanel.Dock="Top"/> <Border BorderThickness="2" BorderBrush="Orange" xcdg:DataGridPageControl.IsDataGridHost="True" DockPanel.Dock="Bottom"/> </DockPanel> </ControlTemplate> </Setter.Value> </Setter> </Style> </Grid.Resources> <DockPanel> <Button Content="Print Grid" Click="PrintGrid" DockPanel.Dock="Top"/> <xcdg:DataGridControl x:Name="EmployeesGrid" ItemsSource="{Binding Source={StaticResource cvs_employees}}"> <xcdg:DataGridControl.PrintView> <xcdg:PrintTableView PageStyle="{StaticResource page_style}"> <xcdg:PrintTableView.PageHeaders> <DataTemplate> <TextBlock Text="Xceed WPF Documentation" HorizontalAlignment="Center" FontWeight="Bold" FontSize="20"/> </DataTemplate> <DataTemplate> <TextBlock Text="Printing Example" HorizontalAlignment="Center" FontSize="16"/> </DataTemplate> </xcdg:PrintTableView.PageHeaders> <xcdg:PrintTableView.PageFooters> <DataTemplate> <StackPanel HorizontalAlignment="Right" Orientation="Horizontal"> <TextBlock Text="Page "/> <TextBlock Text="{xcdg:ViewBinding CurrentPageNumber}"/> </StackPanel> </DataTemplate> </xcdg:PrintTableView.PageFooters> </xcdg:PrintTableView> </xcdg:DataGridControl.PrintView> </xcdg:DataGridControl> </DockPanel> </Grid> |
VB.NET |
Copy Code |
---|---|
Private Sub PrintGrid( ByVal sender As Object, ByVal e As RoutedEventArgs ) Me.EmployeeGrid.Print( "Employee_Grid", True ) End Sub |
C# |
Copy Code |
---|---|
private void PrintGrid( object sender, RoutedEventArgs e ) { this.EmployeesGrid.Print( "Employee_Grid", true ); } |