追記
VisualBrush
を使用するほうがスマートだったかもしれません。
WPFでプリントしたい
注)プリンタが手元にないので未確認です。
そのエラーはすでにウィンドウ等にAddされているコントロール(canvas1
)を、別のものにAddしようとしたためです。
そのため参考記事ではすべてコードで作成しています。
RemoveLogicalChild
で切ることはできると思いますが、切ると当然表示も消えます。
FrameworkElement.RemoveLogicalChild(Object) メソッド (System.Windows) | Microsoft Docs
あるいはこちらは表示されているものを入れてもいいようです。
PrintDialog.PrintVisual(Visual, String) メソッド (System.Windows.Controls) | Microsoft Docs
プリンタを出すのが面倒なので、仮想プリンタでPDFに出してみましたが出ましたよ?(細かい設定とかはわからないですが
xml
1 < Window
2 x: Class = " Questions345252.MainWindow "
3 xmlns = " http://schemas.microsoft.com/winfx/2006/xaml/presentation "
4 xmlns: x = " http://schemas.microsoft.com/winfx/2006/xaml "
5 Width = " 800 "
6 Height = " 450 " >
7 < Grid x: Name = " grid1 " >
8 < Grid.RowDefinitions >
9 < RowDefinition Height = " Auto " />
10 < RowDefinition />
11 </ Grid.RowDefinitions >
12 < StackPanel >
13 < Button Click = " Button_Click " Content = " 印刷 - Remove " />
14 < Button Click = " Button_Click_1 " Content = " 印刷 - PrintVisual " />
15 </ StackPanel >
16 < Canvas x: Name = " canvas1 " Grid.Row = " 1 " >
17 < Rectangle
18 Canvas.Left = " 100 "
19 Canvas.Top = " 100 "
20 Width = " 100 "
21 Height = " 100 "
22 Fill = " Blue " />
23 < TextBlock
24 Canvas.Left = " 60 "
25 Canvas.Top = " 15 "
26 Text = " 印刷てすと " />
27 < Button
28 Canvas.Left = " 273 "
29 Canvas.Top = " 65 "
30 Width = " 80 "
31 Content = " aaa " />
32 </ Canvas >
33 </ Grid >
34 </ Window >
cs
1 using System . Printing ;
2 using System . Windows ;
3 using System . Windows . Controls ;
4 using System . Windows . Documents ;
5
6 namespace Questions345252
7 {
8 public partial class MainWindow : Window
9 {
10 public MainWindow ( ) => InitializeComponent ( ) ;
11
12 private void Button_Click ( object sender , RoutedEventArgs e )
13 {
14 var printDialog = new PrintDialog ( ) ;
15 var result = printDialog . ShowDialog ( ) ;
16 if ( ! result . HasValue || ! result . Value ) return ;
17
18 // 切断
19 grid1 . Children . Remove ( canvas1 ) ;
20
21 var page = new FixedPage ( ) ;
22
23 // 入れる
24 page . Children . Add ( canvas1 ) ;
25
26 var queue = printDialog . PrintQueue ;
27 var writer = PrintQueue . CreateXpsDocumentWriter ( queue ) ;
28 writer . Write ( page ) ;
29
30 // 終わったのでこっちからも切断
31 page . Children . Remove ( canvas1 ) ;
32
33 // 戻す
34 grid1 . Children . Add ( canvas1 ) ;
35 }
36
37 private void Button_Click_1 ( object sender , RoutedEventArgs e )
38 {
39 var printDialog = new PrintDialog ( ) ;
40 var result = printDialog . ShowDialog ( ) ;
41 if ( ! result . HasValue || ! result . Value ) return ;
42
43 printDialog . PrintVisual ( canvas1 , "Questions345252" ) ;
44 }
45 }
46 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/22 01:15
2021/06/23 09:37
2021/06/23 13:51
2021/06/24 22:47
2021/06/24 23:24
2021/06/25 11:14