2011-10-27 40 views
2

我有網格數組,我想打印所有grid.each網格在他的單元格文本框 網格設置爲ShowGridLines = false;並且我也有一個方法刪除文本框邊框。打印WPF網格沒有GridLines

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

回答

1

第一個問題是,撥打this.DeleteBorder()兩次是毫無意義的。其次,假設gridArray只有Grid s在其中;假設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問題。