2

私はグリッド配列を持っていて、すべてのグリッドを印刷したいと思います。各グリッドはセルのテキストボックスにグリッドが設定されて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");
    }
}

しかし、その結果、最初のページのみがborder/gridLinesなしで印刷され、他のページはまだborder/gridLines付きで印刷されます

4

1 に答える 1

1

最初の問題は、2 回呼び出すのthis.DeleteBorder()は無意味だということです。

次に、sgridArrayのみが含まれていると仮定します。Gridそれぞれにグリッド線を表示する必要はありません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());
    }
}

これで問題が解決しない場合は、 http: //gist.github.comで問題を再現するための XAML やその他のサンプル コードを提供してください。

于 2014-12-26T15:35:09.277 に答える