В Silverlight 3, как я могу получить вызов HtmlPage.Plugin.SetStyleAttribute () для вызова другого кода после изменения размера? - PullRequest
0 голосов
/ 19 мая 2010

Я пытаюсь сделать снимок моего элемента управления Silverlight с помощью WriteableBitmap, и он работает нормально, однако, он только делает снимок того, что показывает. Я пытаюсь изменить размер элемента управления Silverlight, чтобы он отображал все, а затем сделать снимок экрана, однако код не изменяет размер элемента управления до тех пор, пока не завершится код после выполнения вызова, который является кодом снимка ...

Я могу получить эту работу, используя таймер для создания снимка после того, как другой код вызвал изменение размера, но мне интересно, есть ли лучший способ. Вызов HtmlPage.Plugin.SetStyleAttribute должен вызываться из потока пользовательского интерфейса, поэтому я предполагаю, что именно в этом проблема. Тот факт, что он отправляется в поток пользовательского интерфейса, а остальная часть кода - нет, и поэтому сначала выполняется другой код.

Можно ли в любом случае создать новое событие или присоединить его к вызову, чтобы определить, когда он был запущен, чтобы затем запустить мой код снимка?

У меня есть следующий код:

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

Спасибо

John

1 Ответ

0 голосов
/ 19 мая 2010

Джон,

Возможно, вы захотите обработать событие изменения размера плагина, сделать снимок и восстановить высоту плагина.

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

Удачи,
Джим МакКарди, Face to Face Software и YinYangMoney

...