Удалить раскадровку, но сохранить анимированное значение?

Можно также использовать Выборку в качестве клиента SFTP, и затем отредактировать файлы непосредственно на сервере из этого. Существуют также SSHFS (смонтируйте ssh папку как Объем), опции. Это в соответствии с тем, какой сказанный stimms - действительно ли Вы уверены, что хотите материал, сохраненный в синхронизации, или просто хотите отредактировать файлы на сервере?

OS X имеет свою собственную систему уведомлений о файле - это - то, на чем Центр внимания основан. Я не услышал ни о какой программе, которая использует это, чтобы тогда сохранить вещи в синхронизации, но это, конечно, мыслимо.

я лично использую RCS для этого типа вещи:-, пока это имеет ручной аспект, маловероятно, что я хочу продвинуть что-то к даже тестовому серверу от моей dev машины, не тестируя его сначала. И если я работаю над сервером разработки, тогда я использую одну из опций, данных выше.

10
задан bitbonk 5 November 2009 в 22:39
поделиться

1 ответ

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

Если вы действительно хотите удалить раскадровку и сохранить значения свойств, вы должны установить анимированные значения непосредственно в свойствах. Это можно сделать, установив для каждого значения анимированное значение, примерно так:

void CopyAnimatedValuesToLocalValues(DependencyObject obj)
{
  // Recurse down tree
  for(int i=0; i<VisualTreeHelper.GetChildrenCount(obj); i++)
    CopyAnimatedValuesToLocalValues(VisualTreeHelper.GetChild(obj, i));

  var enumerator = obj.GetLocalValueEnumerator();
  while(enumerator.MoveNext())
  {
    var prop = enumerator.Current.Property;
    var value = enumerator.Current.Value as Freezable;

    // Recurse into eg. brushes that may be set by storyboard, as long as they aren't frozen
    if(value!=null && !value.IsFrozen)
      CopyAnimatedValuesToLocalValues(value);

    // *** This is the key bit of code ***
    if(DependencyPropertyHelper.GetValueSource(obj, prop).IsAnimated)
      obj.SetValue(prop, obj.GetValue(prop));

  }
}

Вызовите это прямо перед удалением раскадровки для копирования анимированных значений.

Изменить Был сделан комментарий, что этот код может быть необязательно, потому что вызов BeginAnimation с BeginTime = null дает аналогичный эффект.

Хотя верно то, что BeginAnimation с BeginTime = null создает впечатление, будто значения были скопированы в локальный, более поздний вызов RemoveStoryboard приведет к возврату значений. Это связано с тем, что BeginAnimation с BeginTime = null заставляет предыдущую анимацию сохранять свои значения в ожидании начала новой анимации, но не влияет на локальные значения.

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

Это связано с тем, что BeginAnimation с BeginTime = null заставляет предыдущую анимацию сохранять свои значения в ожидании начала новой анимации, но не влияет на локальные значения.

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

Это связано с тем, что BeginAnimation с BeginTime = null заставляет предыдущую анимацию сохранять свои значения в ожидании начала новой анимации, но не влияет на локальные значения.

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

4
ответ дан 4 December 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: