过去两天我已经尝试过这项工作......
所以我在我的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中的样子)(我只是涂黑了涂料中的名称和数字):
这是我在XPS中使用Columns Width =&#34; *&#34;如上所述:
这是我在更改列宽度时得到的结果=&#34; 150&#34;而不是Width =&#34; *&#34;:
在最后一个屏幕截图中,由于某种原因,应该还有4个列被切断。
我认为主要的问题是它在设置为Landscape时不会在Landscape中打印。我不知道如何修复它,因为我已经搜索了整个互联网的最后两天。
非常感谢任何帮助:)