我需要使XAML区域可打印,因此制作此按钮处理程序:
private void Button_Click_Print(object sender, RoutedEventArgs e)
{
Customer.PrintReport(PrintableArea);
}
Run Code Online (Sandbox Code Playgroud)
在PrintReport中,我将frameworkelement打包到其他元素中,以便以与屏幕上不同的方式打印它,如下所示:
public void PrintReport(FrameworkElement fwe)
{
StackPanel sp = new StackPanel();
sp.Children.Add(fwe);
TextBlock tb = new TextBlock();
tb.Text = "hello";
sp.Children.Add(tb);
PrintDialog dialog = new PrintDialog();
if (dialog.ShowDialog() == true)
{
dialog.PrintVisual(sp, "Print job");
}
}
Run Code Online (Sandbox Code Playgroud)
但上面给出了以下错误:
指定的元素已经是另一个元素的逻辑子元素.首先断开它.
有没有一种简单的方法来克隆FrameworkElement,以便我可以操作副本,打印它,然后忘记它,让XAML中的原始元素显示在屏幕上完好无损?
我想象的是这样的东西:
FrameworkElement fwe2 = FrameworkElement.Clone(fwe); //pseudo-code
Run Code Online (Sandbox Code Playgroud)