WPFコントロールを印刷する方法を検索し、いくつかの解決策を見つけました。アスペクト比を維持しながら、印刷されたコントロールを印刷ページに合わせる必要があります(私のコントロールは四角です;スドクグリッド)。WPFページに合わせて印刷
ページに合わせてサイズを変更して位置を変更するソリューションが見つかりました。それはうまくいきますが、それは私のウィンドウにコントロールを置き換えます。ここ
は、私は、印刷およびスケーリングのために使用するコードは次のとおりです。
//get selected printer capabilities
System.Printing.PrintCapabilities capabilities = dialog.PrintQueue.GetPrintCapabilities(dialog.PrintTicket);
//get scale of the print wrt to screen of WPF visual
double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth/mrizka.ActualWidth, capabilities.PageImageableArea.ExtentHeight/mrizka.ActualHeight);
//Transform the Visual to scale
mrizka.LayoutTransform = new ScaleTransform(scale, scale);
//get the size of the printer page
Size sz = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
//update the layout of the visual to the printer page size.
mrizka.Measure(sz);
mrizka.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sz));
dialog.PrintVisual(mrizka, mrizka.getID().ToString());
私はこの解決するために、2つのaproachesを試してみました:
クローン私のコントロールをして、クローン化された1、unaffecting元を変換します。 何らかの理由でDidntの仕事が終了しました。提供されたDependencyObjectは、このFreezableのコンテキストではありませんが、奇妙なことにいくつかのケースでのみです。
サイズと位置の変更を元に戻します。 InvalidateArrange()メソッドを呼び出そうとしましたが、printメソッドの最初の呼び出しでのみ動作していました。 2回目の通話中は、動作しませんでした。
どうすればよいですか、ご意見は<ありがとうございます。
System.PrintingおよびReachFrameworkへの参照を追加する必要があります。 – StillLearnin
またSystem.Windows.MediaとSystem.Windows.Controlsを参照しているようです – Jeff
これは私にとってはうまくいかず、LayoutTransformはどんな種類のTransformにも関係なく無視されるようです。 – Lennart