Мне нужно сделать области XAML для печати и поэтому сделать этот обработчик этой кнопки:
private void Button_Click_Print(object sender, RoutedEventArgs e)
{
Customer.PrintReport(PrintableArea);
}
И в PrintReport я упаковываю элемент framework в другие элементы, чтобы напечатать его немного другим способом, чем на экране, например:
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");
}
}
Но приведенное выше дает мне следующую ошибку:
Указанный элемент уже логический дочерний элемент другого элемента. Сначала отключите его.
Есть ли простой способ клонировать элемент FrameworkElement, чтобы я мог манипулировать копией, печатать ее, а затем забывать об этом, оставляя исходный элемент в XAML на экране неизменным?
Что-то вроде этого я бы подумал:
FrameworkElement fwe2 = FrameworkElement.Clone(fwe); //pseudo-code