CompositionScopedBatch Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Явно созданная группа активных анимаций или эффектов.
public ref class CompositionScopedBatch sealed : CompositionObject
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 131072)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class CompositionScopedBatch final : CompositionObject
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 131072)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class CompositionScopedBatch : CompositionObject
Public NotInheritable Class CompositionScopedBatch
Inherits CompositionObject
- Наследование
- Атрибуты
Требования к Windows
Семейство устройств |
Windows 10 (появилось в 10.0.10586.0)
|
API contract |
Windows.Foundation.UniversalApiContract (появилось в v2.0)
|
Примеры
Пакетная служба с заданной областью
// The Green Square's completion events for the Offset and Opacity animations are aggregated
// The Rotation animation completion event is not aggregated
// When the aggregated events are completed OnBatchCompleted method is executed
public void BatchAnimations()
{
// Create a Scoped batch to capture animation completion events
_batch = _compositor.CreateScopedBatch(CompositionBatchTypes.Animation);
// Executing the Offset animation and aggregating completion event
ApplyOffsetAnimation(_greenSquare);
// Suspending to exclude the following Rotation animation from the batch
_batch.Suspend();
// Executing the Rotation animation
ApplyRotationAnimation(_greenSquare);
// Resuming the batch to collect additional animations
_batch.Resume();
// Executing the Opacity animation and aggregating completion event
ApplyOpacityAnimation(_greenSquare);
// Batch is ended and no objects can be added
_batch.End();
// Method triggered when batch completion event fires
_batch.Completed += OnBatchCompleted;
}
Комментарии
Представляет группу активных анимаций или эффектов и запускает обратный вызов после завершения всех членов группы. CompositionScopedBatch создается явным образом и используется для назначения определенных объектов, которые будут включены в один пакет с заданной областью.
Можно создать несколько экземпляров CompositionScopedBatch, а объекты можно агрегировать в нескольких пакетах одновременно.
Создать
Чтобы агрегировать определенную группу анимаций или нацелить на событие завершения одной анимации, создайте пакет с заданной областью. Пакет с заданной областью явно создается с помощью Compositor.CreateScopedBatch и используется для назначения определенных объектов для включения в один пакет. Пакет с заданной областью можно создать в любом потоке и не привязан к потоку композиции. Пакеты с заданной областью будут агрегировать только объекты в созданном потоке.
CompositionScopedBatch myScopedBatch = _compositor.CreateScopedBatch(CompositionBatchTypes.Animation);
Приостановка и возобновление
После создания пакета с заданной областью все запущенные анимации агрегируются, пока пакет не будет явно приостановлен или завершен с помощью функции Suspend или End.
CompositionScopedBatch можно явно приостановить с помощью команды Suspend , чтобы исключить объекты из этого пакета. При приостановке пакета его можно повторно открыть, вызвав Resume. Вызов функции Suspend останавливает агрегирование конечных состояний анимации до вызова Resume. Это позволяет явным образом исключить содержимое из данного пакета.
В следующем фрагменте кода анимация, нацеленная на свойство Offset объекта VisualA, не будет добавлена в пакет.
myScopedBatch.Suspend();
VisualA.StartAnimation("Offset", myAnimation);
myScopeBatch.Resume();
Конец
CompositionScopedBatch должен быть явно закрыт с помощью end. После закрытия его нельзя приостановить или возобновить снова. Чтобы завершить выполнение пакета, необходимо вызвать метод End(). Если не вызвать метод End, пакет будет оставаться открытым, постоянно собирая объекты.
В следующем фрагменте кода и схеме показан пример того, как пакет будет агрегировать анимации для отслеживания конечных состояний.
Обратите внимание, что в этом примере пакет будет отслеживать только конечные состояния анимаций 1, 3 и 4, кроме анимации 2.
myScopedBatch.End();
CompositionScopedBatch myScopedBatch = _compositor.CreateScopedBatch(CompositionBatchTypes.Animation);
// Start Animation1
[…]
myScopedBatch.Suspend();
// Start Animation2
[…]
myScopedBatch.Resume();
// Start Animation3
[…]
// Start Animation4
[…]
myScopedBatch.End();
Создание пакета с событием завершения отдельной анимации
Если вы хотите узнать, когда заканчивается одна анимация, необходимо создать пакет с заданной областью, который будет включать только анимацию, на которую вы ориентируетесь.
Пример:
CompositionScopedBatch myScopedBatch = _compositor.CreateScopedBatch(CompositionBatchTypes.Animation);
Visual.StartAnimation("Opacity", myAnimation);
myScopedBatch.End();
Извлечение события завершения пакета
При создании пакета с отдельной анимацией или группой анимаций извлечение события завершения пакета осуществляется аналогичным образом. Регистрируется метод обработки событий для события Completed целевого пакета.
myScopedBatch.Completed += OnBatchCompleted;
Состояния пакетов
Существует два свойства, которые можно использовать для определения состояния существующего пакета. IsActive и IsEnded.
Свойство IsActive возвращает значение "true", если целевой пакет открыт для сбора анимаций. Когда пакет будет приостановлен или завершен, свойство IsActive будет возвращать значение "false".
Свойство IsEnded возвращает значение "true", когда к этому конкретному пакету нельзя добавить анимацию. Пакет будет завершен при вызове явного вызова End для определенного пакета.
Свойства
Comment |
Строка, связанная с CompositionObject. (Унаследовано от CompositionObject) |
Compositor |
Составитель, используемый для создания этого объекта CompositionObject. (Унаследовано от CompositionObject) |
Dispatcher |
Диспетчер для CompositionObject. (Унаследовано от CompositionObject) |
DispatcherQueue |
Возвращает dispatcherQueue для объекта CompostionObject. (Унаследовано от CompositionObject) |
ImplicitAnimations |
Коллекция неявных анимаций, присоединенных к этому объекту. (Унаследовано от CompositionObject) |
IsActive |
Указывает, открыт ли объект CompositionScopedBatch для агрегирования объектов. |
IsEnded |
Указывает, закрыт ли объект CompositionScopedBatch и больше не может принимать изменения. |
Properties |
Коллекция свойств, связанных с CompositionObject. (Унаследовано от CompositionObject) |
Методы
Close() |
Закрывает объект CompositionObject и освобождает системные ресурсы. (Унаследовано от CompositionObject) |
ConnectAnimation(String, CompositionAnimation) |
Соединения и анимация. (Унаследовано от CompositionObject) |
DisconnectAnimation(String) |
Отключает анимацию. (Унаследовано от CompositionObject) |
Dispose() |
Выполняет определяемые приложением задачи, связанные с удалением, высвобождением или сбросом неуправляемых ресурсов. (Унаследовано от CompositionObject) |
End() |
Закрывает CompositionScopedBatch. После закрытия CompositionScopedBatch его нельзя приостановить или возобновить снова. |
PopulatePropertyInfo(String, AnimationPropertyInfo) |
Определяет свойство, которое можно анимировать. (Унаследовано от CompositionObject) |
Resume() |
Возобновляет агрегирование объектов в CompositionScopedBatch. |
StartAnimation(String, CompositionAnimation, AnimationController) |
Подключает анимацию к указанному свойству объекта и запускает анимацию. (Унаследовано от CompositionObject) |
StartAnimation(String, CompositionAnimation) |
Подключает анимацию к указанному свойству объекта и запускает анимацию. (Унаследовано от CompositionObject) |
StartAnimationGroup(ICompositionAnimationBase) |
Запускает группу анимации. Метод StartAnimationGroup в CompositionObject позволяет запустить CompositionAnimationGroup. Все анимации в группе будут запущены одновременно для объекта . (Унаследовано от CompositionObject) |
StopAnimation(String) |
Отключает анимацию от указанного свойства и останавливает анимацию. (Унаследовано от CompositionObject) |
StopAnimationGroup(ICompositionAnimationBase) |
Останавливает группу анимации. (Унаследовано от CompositionObject) |
Suspend() |
Приостанавливает агрегирование объектов в CompositionScopedBatch. |
TryGetAnimationController(String) |
Возвращает AnimationController для анимации, выполняемой с указанным свойством. (Унаследовано от CompositionObject) |
События
Completed |
Событие активируется после завершения всех анимаций и эффектов в CompositionScopedBatch . |