私はXAMLをレンダリングし、それからBMPを生成するために、WPFのランタイムを使用しようとするだろう。通常、Silverlightで動作するXAMLはWPFで動作しますが、その逆は必ずしも真ではありません。
WPFを使用すると、コントロールをプログラムでインスタンス化したり、緩いXAMLを読み込んだりすることができます。次に、レイアウトを更新し、ビジュアルをビットマップにキャプチャするように指示できます。
EDIT
サーバー上のXAMLを取得するには、私はあなたがあなたの溶液中での新しいWPFのクラスライブラリプロジェクトを作成することをお勧めします。そして、むしろそれらをコピーするよりも、そのプロジェクトにアイテム「既存の追加」と「リンク」ファイルとして所望のXAMLファイルを追加するために選択します。あなたはSilverlightとWPFのプロジェクト間で1つのファイルを共有することができますこの方法を。
DLLをコンパイルし、画像出力を返すサービスまたはページ内のサーバー上でそのDLLを使用します。そのページで、ユーザーコントロールのインスタンスを作成し、datacontextを設定して、イメージを出力します。ビジュアルからイメージをキャプチャするには、RenderTargetBitmapを使用できます。ずっとしようと私は、サーバー側ででGDIを使用してUIをレンダリングして行くことにしました失敗した後
var arrangeSize = new Size(300, 300);
var arrangeRect = new Rect(new Point(0, 0), arrangeSize);
var control = new MyControl();
control.DataContext = new MyViewModel();
control.Measure(arrangeSize);
control.Arrange(arrangeRect);
control.InvalidateVisual();
control.UpdateLayout();
RenderTargetBitmap renderTarget =
new RenderTargetBitmap(
arrangeSize.X,
arrangeSize.Y,
96,
96,
System.Windows.Media.PixelFormats.Default
);
renderTarget.Render(control);
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(renderTarget));
using (var pageOutStream = new FileStream(targetSavePath + ".png", FileMode.Create, FileAccess.Write))
{
encoder.Save(pageOutStream);
pageOutStream.Close();
}
私はWPFを使用してXAMLをレンダリングすることはできませんが、これは私の次のコールポートです。乾杯、あなたは更新され続けるでしょう – StickyMcGinty