Печать сетки WPF без GridLines
У меня есть сетка, и я хочу напечатать всю сетку grid.each в своем текстовом поле ячейки сетки, установленной на 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
1 ответ
Решение
Первая проблема заключается в том, что this.DeleteBorder()
дважды бессмысленно.
Во-вторых, при условии gridArray
имеет только 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());
}
}
Если это не решит вашу проблему, предоставьте пример кода XAML и / или более, чтобы воссоздать проблему на http://gist.github.com/.