2008-09-15 3 views
0

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

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

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

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

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

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

ответ

1

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

0

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

0

Надеюсь, это не плохая форма, чтобы ответить на мой собственный вопрос.

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

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

Смежные вопросы