Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

PrintVisual in WPF

4.8K
15 апреля 2009 года
sealmu
53 / / 28.02.2007
При клике на кнопку Print и выборе принтера я получаю распечатаную страницу с белой границей по краям(как и ожидалось). Но если вместо принтера я выбираю Microsoft XPS Document Writer то получаю страницу с белой границей слева и вверху. Но почему ее нет внизу и справа, а LightSteelBlue фон простираеться до краев страницы?

{pdf}
http://pic.ipicture.ru/uploads/090417/eSRQuLf4Bj.jpg

{xps}
http://pic.ipicture.ru/uploads/090417/0VRwsmFUWB.jpg


[HTML]<Window x:Class="Printing.PrintVisual"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="PrintVisual" Height="259" Width="282"
>
<Grid Margin="5" Name="grid">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>

<Canvas Name="canvas">
<TextBlock Canvas.Top="50" Canvas.Left="20" FontSize="25" FontWeight="Bold">Hello There</TextBlock>

<Path Fill="Yellow" Stroke="Blue" Margin="5" Canvas.Top="10" Canvas.Left="10" >
<Path.Data>
<GeometryGroup>
<RectangleGeometry Rect="0 0 100 100"></RectangleGeometry>
<EllipseGeometry Center="50 50" RadiusX="35" RadiusY="25"></EllipseGeometry>
</GeometryGroup>
</Path.Data>
</Path>

</Canvas>

<StackPanel Orientation="Horizontal" Grid.Row="1">
<Label>Scale Percentage:</Label>
<TextBox MinWidth="50" Name="txtScale">500</TextBox>
</StackPanel>
<Button Grid.Row="3" Click="cmdPrint_Click">Print</Button>
</Grid>
</Window>[/HTML]




Код:
public partial class PrintVisual : System.Windows.Window
    {

        public PrintVisual()
        {
            InitializeComponent();
        }

        private void cmdPrint_Click(object sender, RoutedEventArgs e)
        {            
            PrintDialog printDialog = new PrintDialog();
           
            if (printDialog.ShowDialog() == true)
            {
                // Scale the TextBlock in both dimensions.
                double zoom;
                if (Double.TryParse(txtScale.Text, out zoom))
                {
                    grid.Visibility = Visibility.Hidden;

                    // Add a background to make it easier to see the canvas bounds.
                    canvas.Background = Brushes.LightSteelBlue;

                    // Resize it.
                    canvas.LayoutTransform = new ScaleTransform(zoom / 100, zoom / 100);

                    // Get the size of the page.
                    Size pageSize = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight);

                    // Trigger the sizing of the element.                                    
                    canvas.Measure(pageSize);
                    canvas.Arrange(new Rect(10, 10, pageSize.Width - 20, pageSize.Height - 20));
                   
                    // Print the element.
                    printDialog.PrintVisual(canvas, "A Scaled Drawing");

                    // Reset the canvas.
                    canvas.Background = null;
                    canvas.LayoutTransform = null;                    
                    grid.Visibility = Visibility.Visible;                
                                                           
                }
                else
                {
                    MessageBox.Show("Invalid scale value.");
                }
               
            }

        }
    }

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог