Поделиться через


CompositionScopedBatch Класс

Определение

Явно созданная группа активных анимаций или эффектов.

public ref class CompositionScopedBatch sealed : CompositionObject
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.LiftedContract, 65536)]
/// [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.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.WindowsAppSDKContract, 65536)]
class CompositionScopedBatch final : CompositionObject
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.LiftedContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class CompositionScopedBatch : CompositionObject
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.WindowsAppSDKContract), 65536)]
public sealed class CompositionScopedBatch : CompositionObject
Public NotInheritable Class CompositionScopedBatch
Inherits CompositionObject
Наследование
Object Platform::Object IInspectable CompositionObject CompositionScopedBatch
Атрибуты

Примеры

Пакетная служба с заданной областью

// 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();

Пакет с заданной областью содержит анимации 1, 3 и 4, в то время как анимация 2 исключена из него

Создание пакета с событием завершения отдельной анимации

Если вы хотите узнать, когда завершается одна анимация, необходимо создать пакет с заданной областью, который будет включать только целевую анимацию.

Например:

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

Compositor, используемый для создания объекта CompositionObject.

(Унаследовано от CompositionObject)
DispatcherQueue

Возвращает dispatcherQueue для CompositionObject.

(Унаследовано от CompositionObject)
ImplicitAnimations

Коллекция неявных анимаций, присоединенных к этому объекту.

(Унаследовано от CompositionObject)
IsActive

Указывает, открыт ли объект CompositionScopedBatch для агрегирования объектов.

IsEnded

Указывает, закрыт ли объект CompositionScopedBatch и больше не может принимать изменения.

Properties

Коллекция свойств, связанных с CompositionObject.

(Унаследовано от CompositionObject)

Методы

Close()

Закрывает CompositionObject и освобождает системные ресурсы.

(Унаследовано от 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 .

Применяется к

См. также раздел