您可以在Silverlight中为自定义依赖项属性设置动画吗?

时间:2008-09-15 12:35:34

标签: silverlight

我可能会遗漏一些非常明显的东西。我正在尝试编写一个自定义Panel,其中的内容根据几个依赖属性进行布局(我假设他们是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);
    }

编辑:我在没有调用InvalidateArrange的情况下尝试过它(在任何情况下都是绝对必要的),结果是一样的。在灾难性错误开始之前,甚至都没有调用事件处理程序。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我会尝试在OnPropertyChanged中注释掉InvalidateArrange,看看会发生什么。

答案 2 :(得分:0)

我希望回答我自己的问题并不是坏事。

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

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