Можете ли вы анимировать пользовательское свойство зависимости в Silverlight?

StackOverflow https://stackoverflow.com/questions/62382

  •  09-06-2019
  •  | 
  •  

Вопрос

Возможно, я упускаю что-то действительно очевидное.Я пытаюсь написать пользовательскую панель, где содержимое расположено в соответствии с несколькими свойствами зависимостей (я предполагаю, что они иметь быть DPS, потому что я хочу иметь возможность анимировать их.)

Однако, когда я пытаюсь запустить раскадровку для анимации обоих этих свойств, Silverlight выдает катастрофическую ошибку.Но если я попытаюсь оживить только один из них, это сработает нормально.И если я попытаюсь анимировать одно из моих свойств и "встроенное" свойство (например, непрозрачность), это также сработает.Но если я попытаюсь анимировать оба моих пользовательских свойства, я получу катастрофическую ошибку.

Кто-нибудь еще сталкивался с этим?

Редактировать:

Два DPS - scaleX и scaleY - оба двойные.Они масштабируют положение дочерних элементов по X и Y на панели.Вот как определяется один из них:

    public double ScaleX
    {
        get { return (double)GetValue(ScaleXProperty); }
        set { SetValue(ScaleXProperty, value); }
    }

    /// <summary> 
    /// Identifies the ScaleX dependency property.
    /// </summary> 
    public static readonly DependencyProperty ScaleXProperty =
                DependencyProperty.Register(
                      "ScaleX",
                      typeof(double),
                      typeof(MyPanel),
                      new PropertyMetadata(OnScaleXPropertyChanged));

    /// <summary>
    /// ScaleXProperty property changed handler. 
    /// </summary>
    /// <param name="d">MyPanel that changed its ScaleX.</param>
    /// <param name="e">DependencyPropertyChangedEventArgs.</param> 
    private static void OnScaleXPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        MyPanel _MyPanel = d as MyPanel;
        if (_MyPanel != null)
        {
            _MyPanel.InvalidateArrange(); 
        }
    }

    public static void SetScaleX(DependencyObject obj, double val)
    {
        obj.SetValue(ScaleXProperty, val);
    }

    public static double GetScaleX(DependencyObject obj)
    {
        return (double)obj.GetValue(ScaleXProperty);
    }

Редактировать:Я пробовал это с вызовом InvalidateArrange и без него (что абсолютно необходимо в любом случае), и результат тот же.Обработчик событий даже не вызывается до возникновения катастрофической ошибки.

Это было полезно?

Решение

Это документированная ошибка в Silverlight 2 Beta 2.Вы не можете анимировать два пользовательских свойства зависимости для одного и того же объекта.

Другие советы

Я бы попробовал закомментировать InvalidateArrange в OnPropertyChanged и посмотреть, что произойдет.

Я надеюсь, что это не будет дурным тоном - ответить на мой собственный вопрос.

Silverlight 2 Release Candidate 0 был выпущен сегодня, я протестировал на нем эту проблему, и, похоже, она была исправлена.Оба пользовательских DPS в моей тестовой панели теперь могут быть анимированы должным образом, так что приложение ведет себя так, как ожидалось.И это хорошо.

Обратите внимание, что этот RC является RC только для разработчиков, поэтому стандартная сборка Silverlight не обновлялась.Однако я бы ожидал, что он будет полностью выпущен в следующем месяце.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top