C#WPF PrintDialog PrintVisual DataGrid对我不起作用

时间:2014-08-20 11:25:58

标签: c# wpf printing datagrid

过去两天我已经尝试过这项工作......

所以我在我的XAML中有一个DataGrid我要打印,代码如下:

<TabItem Header="Drucken">
    <StackPanel x:Name="StackPanelPrint" >
        <DataGrid x:Name="DatagridPrint" Margin="10" AutoGenerateColumns="False" HeadersVisibility="Column">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Path=Nr}" Header="Nr." Width="40" />
                <DataGridTextColumn Binding="{Binding Path=Nachname}" Header="Nachname" Width="*"/>
                <DataGridTextColumn Binding="{Binding Path=Vorname}" Header="Vorname" Width="*"/>
                <DataGridTextColumn Binding="{Binding Path=Telefon}" Header="Telefon" Width="110"/>
            </DataGrid.Columns>
        </DataGrid>
    </StackPanel>
</TabItem>

StackPanel实际上并不需要,我只是尝试使用它然后打印StackPanel,但这也不起作用。

用户按下按钮进行打印后,我必须动态地向数据网格添加列,然后启动PrintDialog。代码如下:

private void btnPrintList_Click(object sender, RoutedEventArgs e)
{
    var dialog = new AnzahlEinheiten();
    dialog.Owner = this;
    if (dialog.ShowDialog() == true)
    {
        int einheiten = Int32.Parse(dialog.Anzahl);
        for (int i = 1; i <= einheiten; i++)
        {
            DatagridPrint.Columns.Add(CreateColumn(i.ToString()));
        }
        DatagridPrint.Columns.Add(CreateColumn("Schn."));

        //printing starts here, above is adding the columns

        PrintDialog pd = new PrintDialog();
        pd.PrintTicket.PageOrientation = PageOrientation.Landscape;
        DatagridPrint.ItemsSource = SelectedKurs.Teilnehmer;
        if (pd.ShowDialog() == true)
        {
            pd.PrintVisual(DatagridPrint, "Anwesenheitsliste");
        }
    }
}

private DataGridTextColumn CreateColumn(String header)
{
    DataGridTextColumn c = new DataGridTextColumn();
    c.Header = header;
    c.Width = 40;
    return c;
}

设置横向有效,至少PrintDialog在设置中显示它已经在横向中。

现在是预期结果和我的结果的2个屏幕截图。

预期结果(这是我的DataGrid在添加列后在WPF中的样子)(我只是涂黑了涂料中的名称和数字):

DataGrid Picture

这是我在XPS中使用Columns Width =&#34; *&#34;如上所述:

Printed Out 1

这是我在更改列宽度时得到的结果=&#34; 150&#34;而不是Width =&#34; *&#34;:

Printed Out 2

在最后一个屏幕截图中,由于某种原因,应该还有4个列被切断。

我认为主要的问题是它在设置为Landscape时不会在Landscape中打印。我不知道如何修复它,因为我已经搜索了整个互联网的最后两天。

非常感谢任何帮助:)

0 个答案:

没有答案