2008-09-15 21 views
0

我可能会错过一些非常明显的东西。我试图编写一个自定义面板,其中内容根据一些依赖性属性进行布置(我假设它们具有为DP,因为我希望能够为它们设置动画效果。)您可以在Silverlight中为自定义依赖项属性设置动画效果吗?

但是,当我尝试运行故事板来为这两个属性设置动画时,Silverlight会抛出一个Catastophic Error。但是,如果我尝试对其中的一个进行动画制作,它可以正常工作。如果我尝试为我的某个属性和“内置”属性(如不透明度)设置动画效果,它也可以。但是,如果我尝试对我的自定义属性进行动画处理,则会发生灾难性错误。

其他人碰到过吗?

编辑:

两个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(这是绝对必要的,任何情况下),结果是一样的尝试。在灾难性错误启动之前,事件处理程序甚至不会被调用。

回答

1

这是Silverlight 2 Beta 2中记录的错误。您无法在同一个对象上为两个自定义依赖属性设置动画。

0

我会尝试注释OnPropertyChanged中的InvalidateArrange并查看会发生什么。

0

我希望能够回答我自己的问题并不是什么糟糕的形式。

Silverlight 2 Release Candidate 0今天发布,我已经测试过这个问题了,它似乎已经修复了。现在我的测试面板中的两个自定义DP都可以正常动画,所以该应用程序的行为如预期。这很好。

请注意,此RC仅是一个基于开发人员的RC,因此Silverlight的标准版本尚未更新。不过,我预计它会在下个月完全发布。

相关问题