0

WriteableBitmap を使用して Silverlight コントロールのスナップショットを取得しようとしていますが、正常に動作しますが、表示されているもののスナップショットしか取得できません。Silverlight コントロールのサイズを変更して、すべてを表示してからスクリーンショットを撮ろうとしていますが、呼び出しがすべて実行された後のコードがスナップショット コードになるまで、コードはコントロールのサイズを変更しません...

他のコードがサイズ変更を引き起こした後、タイマーを使用してスナップショットを起動することでこの作業を行うことができますが、もっと良い方法があるかどうか疑問に思っています。HtmlPage.Plugin.SetStyleAttribute 呼び出しは UI スレッドから呼び出す必要があるため、そこに問題があると想定しています。コードの残りの部分はそうではなく、他のコードが最初に実行されている間に UI スレッドにディスパッチされているという事実。

新しいイベントを作成するか、呼び出しにアタッチして、いつ実行されたかを判断し、スナップショット コードを起動する方法はありますか?

次のコードがあります。

private void btnTakeSnapshot_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        if (CurrentContractAction != null)
        {
            string heightBefore = HtmlPage.Plugin.GetStyleAttribute("height");
            HtmlPage.Plugin.SetStyleAttribute("height", string.Format("{0}px", "1800")); //this line doesn't change the height until after the "TakeSnapshot" code is run for some reason, I'm thinking it is because it is most likely dispatched to the UI thread :( and the following code is not run on the UI thread

            Snapshot snapshot = new Snapshot(string.Format("Action_Schedule_{0}", CurrentContractAction.Title), LayoutRoot, LayoutRoot, busyIndicatorDataGrid);

            snapshot.HideElements(btnViewGanttChart, btnSave, btnEditAction, btnFullScreen, btnTakeSnapshot, btnLockAndSubmit);

            snapshot.TakeSnapshot();

            snapshot.ResetElementsVisibility();

            HtmlPage.Plugin.SetStyleAttribute("height", string.Format("{0}px", heightBefore));
        }
    }

ありがとう、

ジョン

4

1 に答える 1

0

ジョン、

プラグインのサイズ変更イベントを処理し、そこでスナップショットを取得してから、プラグインの高さを復元したい場合があります。

Application.Current.Host.Content.Resized += delegate(object sender, EventArgs e)
{
    // Bail if this resize event was not triggered by the snapshot taker
    // Take the snapshot
    // Restore the plugin height
};

幸運を祈ります、
Jim McCurdy、Face to Face Software、YinYangMoney

于 2010-05-19T16:25:38.373 に答える