In Silverlight 3 how can I get the call to HtmlPage.Plugin.SetStyleAttribute() call to call other co

Posted by John Rennemeyer on Stack Overflow See other posts from Stack Overflow or by John Rennemeyer
Published on 2010-05-19T14:37:40Z Indexed on 2010/05/19 14:40 UTC
Read the original article Hit count: 214

Filed under:
|
|
|

I'm trying to take a snapshot of my Silverlight control using WriteableBitmap and it works fine, however, it only takes a snapshot of what is showing. I'm trying to resize the Silverlight control so it will show everything and then take a screenshot, however, the code doesn't resize the control until after the code after the call all runs which is the snapshot code...

I can get this work using a timer to fire the snapshot after the other code has caused the resize but I'm wondering if there is a better way. The HtmlPage.Plugin.SetStyleAttribute call has to be called from the UI thread so I'm assuming that's where the problem is. The fact that it is being dispatched onto the UI thread while the rest of the code is not and so the other code is being run first.

Is there anyway to create a new event or attach to the call to determine when it has been run to then fire off my snapshot code?

I have the following code:

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));
        }
    }

Thanks,

John

© Stack Overflow or respective owner

Related posts about Silverlight

Related posts about c#