我可能会遗漏一些非常明显的东西。我正在尝试编写一个自定义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的情况下尝试过它(在任何情况下都是绝对必要的),结果是一样的。在灾难性错误开始之前,甚至都没有调用事件处理程序。
答案 0 :(得分:1)
这是Silverlight 2 Beta 2的文档错误。您无法在同一对象上设置两个自定义依赖属性的动画。
答案 1 :(得分:0)
我会尝试在OnPropertyChanged中注释掉InvalidateArrange,看看会发生什么。
答案 2 :(得分:0)
我希望回答我自己的问题并不是坏事。
Silverlight 2 Release Candidate 0今天发布了,我已经测试了这个问题,它似乎已经修复了。我的测试面板中的两个自定义DP现在都可以正常设置动画,因此应用程序的行为符合预期。哪个好。
请注意,此RC仅是基于开发人员的RC,因此Silverlight的标准版本尚未更新。不过,我希望它会在下个月完全发布。