我有一个相当复杂的WPF XAML窗口,它代表一个打印的表单。
主要是,在A4页面上有画布大小。画布的子项是很多嵌套的StackPanels,然后是很多标签,文本块,文本框,标签,复选框,下拉等。
我按如下方式打印窗口:
PrintDialog dlg = new System.Windows.Controls.PrintDialog();
if (dlg.ShowDialog() == true)
{
dlg.PrintVisual(this.PageCanvas, "Document");
}
现在,在打印过程中,我希望文本框的颜色和边框消失。更重要的是,我甚至想用 TEXTBLOCKS 替换一些 TEXTBOXES 和 CHECKBOXES 。
a)是否有预先构建的方法在“屏幕模式”和“打印模式”之间切换?
b)或者,否则,我可以在运行时与文本块交换某些控件吗?
我想避免创建两个相同形式的变体(一个用于屏幕,一个用于打印),因为这将使所有未来的维护工作加倍。
答案 0 :(得分:1)
我认为最好的办法就是创建另一个表单并按照你想要的方式设计它当你点击打印按钮打印那个表格时......别忘了数据绑定对象....最简单的方法是使用数据存储区。
答案 1 :(得分:0)
仅供参考:作为临时解决方案,我找到了一种在运行时替换某个面板中的控件的方法,如下所示:
this.somepanel.Children.Remove(this.sometextbox);
TextBlock n=new TextBlock();
n.Text = "...";
n.TextAlignment = TextAlignment.Right;
this.somepanel.Children.Add(n);
这是一个有效的解决方案;但是,我很确定有更好的解决方案,可以更好地利用整个WPF概念。
然而,暂时,我是这样做的第一个版本。对于第二个版本,我将更深入地了解WPF,并可能发布一个额外的答案或文章。