Можете ли вы анимировать пользовательское свойство зависимостей в Silverlight? - PullRequest
0 голосов
/ 15 сентября 2008

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

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

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

редактирование:

Два DP - 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);
    }

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

Ответы [ 3 ]

1 голос
/ 17 сентября 2008

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

0 голосов
/ 26 сентября 2008

Я надеюсь, что отвечать на мой вопрос неплохо.

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

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

0 голосов
/ 16 сентября 2008

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

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