2011-10-29 7 views
0

私は、hereのアプローチに従って、自分のアプリケーションのカスタマイズされたライブタイルの外観を生成しました。イメージファイルに "User Control"をレンダリングする

このアプローチの唯一の問題は、プログラムのセット全体をc#コードで構築する必要があることです。

私はアプリケーション(LiveTile.xaml)にユーザーコントロールを追加しようとしましたが、すべての四角形とTextBlocksを追加するのではなく、今回は同じアプローチを使用して、UserControlをインスタンス化し、ビットマップにレンダリングしました。

var tileUserControl = new MyLiveTile(); // this internally has a simple 50x50 red grid 
bitmap.Render(tileUserControl, new TranslateTransform()); 

ただし、ビットマップイメージにレンダリングされたものは表示されません。画像は完全に黒くなっています(ユーザーコントロールの中に非常に単純なxamlがあっても)。

これはどのように達成できますか?私も.UpdateLayout().MEASURE()を呼び出す

  • を呼び出す

    • を試してみました何

    • 呼び出す.Arrange();
    • 呼び出し.InvalidateMeasure();
    • 呼び出し.InvalidateArrange();

    出力には効果がないようです。

    ありがとうございました。

  • 答えて

    2

    あなたのレンダリングルーチン全体をポストしていますか?最低でもbitmap.Invalidate()に電話する必要があります。

    また、Control.Loadedイベントを待って、UserControl上のすべてのFrameworkElementsが実際に読み込まれてレンダリングされていることを確認する必要があります。それのいずれかなしに早期に、単にユーザーコントロール要素自体をレンダリングするために、ユーザーコントロールをレンダリング

    、子供(すなわち黒四角)

    +0

    私はすでにinvalidate()呼び出しを持っていますが、.Loadedは起動していないようです。たぶん、ビジュアルツリーに最初に追加する必要があります。理由は何ですか? –

    +0

    いいえ、まったく同じ問題があることをぼんやりと覚えています;-) –

    0

    Imはあまりにもこの問題を持つことです。 Backgroudエージェントを使用してライブタイルを更新している場合、コントロールがコンテンツを読み込んだり、内容を整理したり整理したりレンダリングできるかどうかはわかりません。

    Loadイベントが発生してコントロールを再度レンダリングしようとするまで待機しようとします。

    +0

    Control.Loadedがいつ発生するのかを知るためにeventHandlerを使用しました。私はフォアグラウンドとバックグラウンドモードで試しました。コントロールは常に黒い四角形を描画します。 –

    関連する問題