打印没有网格线的WPF网格

本文关键字:WPF 网格 网格线 打印 | 更新日期: 2023-09-27 18:12:47

我有一个网格数组,我想打印所有的网格。每个网格都在他的单元格文本框中网格设置为ShowGridLines = false;,我也有一个方法来删除文本框的边界。

private void DeletBorder()
{
    Thickness bor = new Thickness(0.0);
    for (int i = 0; i < this.gridArray.Length; i++)
    {
        foreach (Control ctrl in this.gridArray[i].Children)
        {
            if (ctrl.GetType() == typeof(TextBox))
            {
                ((TextBox) ctrl).BorderThickness = bor;
            }
        }
    }
}

我正在尝试用这个方法打印数组中的所有网格:

private void button1_Click(object sender, RoutedEventArgs e)
{
    if (this.comboBox1.SelectedIndex > -1)
    {
        PrintDialog printDlg = new PrintDialog();
        this.DeletBorder();
        if (printDlg.ShowDialog() == true)
        {
            this.DeletBorder();
            foreach (Grid item in this.gridArray)
            {
                printDlg.PrintVisual(item, "Stiker Print Job");
            }
        }
    }
    else
    {
        MessageBox.Show("you must select the page layout first");
    }
}

,但结果是只有第一页打印没有边框/gridLines,但其他仍然打印边框/gridLines

打印没有网格线的WPF网格

第一个问题是,两次调用this.DeleteBorder()是没有意义的。

第二,假设gridArray中只有Grid s;你不需要为每个Grid.显示任何网格线试试这个:

if (printDlg.ShowDialog() == true)
{
    /* remove this--this.DeletBorder(); */
    int index = 0;
    foreach(Grid item in this.gridArray)
    {
        item.ShowGridLines = false;
        // Add an identifier so you know what job is printing. You may need to call:
        // item.UpdateLayout();
        printDlg.PrintVisual(item, "Stiker Print Job: " + index.ToString());
    }
}

如果这不能解决您的问题,请提供一些XAML和/或更多的示例代码来重新创建http://gist.github.com上的问题。