Дождитесь анимации, завершите рендеринг - XAML и C # - PullRequest
6 голосов
/ 07 июня 2010

У меня есть ситуация, когда я анимирую часть своего приложения XAML, и мне нужно дождаться завершения анимации и рендеринга, прежде чем я смогу перейти в своем коде. Пока что конец моей функции выглядит так:

    ProcExpandCollapse.Begin();
    while (ProcExpandCollapse.GetCurrentState() != ClockState.Stopped) { }
}

Который теоретически будет ждать окончания анимации. Но он не будет ждать окончания рендеринга - нить, рисующая приложение, может еще не перерисовать анимацию.

Анимация расширяет элемент UIElement, а затем следующая часть моего кода использует его размер для выполнения некоторых задач. Тогда мой вопрос: как мне подождать, пока мой элемент пользовательского интерфейса будет перерисован, прежде чем двигаться дальше?

Ответы [ 2 ]

7 голосов
/ 08 июня 2010

Я наконец-то нашел ответ (хотя мне пришлось заплатить за консультационные услуги)! По сути, в конечном итоге я поместил фрагмент кода, который использует визуализированные элементы управления, в очередь диспетчера элементов управления с очень низким приоритетом, чтобы он, естественно, отображался перед выполнением этой задачи. Например:

mycontrol.Dispatcher.BeginInvoke((Action)delegate{textbox1.Text = "Grazie";});
mycontrol.Dispatcher.Invoke((Action)delegate{GetScreenshot();}, DispatcherPriority.Background);

Код будет продолжаться после вызова и завершения GetScreenshot, что будет после завершения рендеринга (поскольку рендеринг имеет более высокий приоритет, чем фон).

0 голосов
/ 07 июня 2010

У объекта Storyboard есть событие 'Completed', на которое вы можете подписаться.Он будет вызван после завершения анимации.Это то, что вы ищете?

В основном я думаю, что вы хотите "ProcExpandCollapse.Completed + =" (затем нажмите вкладку, чтобы просмотреть время, VS создаст для вас фрагмент)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...