Игнорируемый размер бумаги в PrintDialog/XPS Document Writer

Я пытаюсь печатать с помощью класса PrintDialog WPF (пространство имен System.Windows.Controls в PresentationFramework.dll, v4.0.30319). Это код, который я использую:

private void PrintMe()
{
    var dlg = new PrintDialog();

    if (dlg.ShowDialog() == true)
    {
        dlg.PrintVisual(new System.Windows.Shapes.Rectangle
        {
            Width = 100,
            Height = 100,
            Fill = System.Windows.Media.Brushes.Red
        }, "test");
    }
}

Проблема заключается в том, что независимо от того, какой размер бумаги я выбираю для «Microsoft XPS Document Writer», сгенерированный XPS всегда имеет ширину и высоту типа бумаги «Letter»:

Это код XAML, который я могу найти внутри пакета XPS:

<FixedPage ... Width="816" Height="1056">


person el_shayan    schedule 12.09.2011    source источник


Ответы (1)


Изменение размера бумаги в диалоговом окне печати влияет только на PrintTicket, а не на содержимое FixedPage. Метод PrintVisual создает страницы размера Letter, поэтому, чтобы иметь другой размер страницы, вам нужно использовать метод PrintDocument, например:

private void PrintMe()
{
    var dlg = new PrintDialog();
    FixedPage fp = new FixedPage();
    fp.Height = 100;
    fp.Width = 100;
    fp.Children.Add(new System.Windows.Shapes.Rectangle
        {
            Width = 100,
            Height = 100,
            Fill = System.Windows.Media.Brushes.Red
        });
    PageContent pc = new PageContent();
    pc.Child = fp;
    FixedDocument fd = new FixedDocument();
    fd.Pages.Add(pc);
    DocumentReference dr = new DocumentReference();
    dr.SetDocument(fd);
    FixedDocumentSequence fds = new FixedDocumentSequence();
    fds.References.Add(dr);            

    if (dlg.ShowDialog() == true)
    {
        dlg.PrintDocument(fds.DocumentPaginator, "test");
    }
}
person mloar    schedule 15.09.2011