我可能会遗漏一些非常明显的东西。我正在尝试编写一个自定义面板,其中内容根据几个依赖属性进行布局(我假设它们必须是 DP,因为我希望能够为它们设置动画。)
但是,当我尝试运行故事板来为这两个属性设置动画时,Silverlight 会引发灾难性错误。但是,如果我尝试仅对其中一个进行动画处理,则效果很好。如果我尝试为我的一个属性和一个“内置”属性(如不透明度)设置动画,它也可以工作。但是,如果我尝试为我的两个自定义属性设置动画,我会收到灾难性错误。
还有人遇到这个吗?
编辑:
两个 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 (在任何情况下都是绝对必要的),结果是一样的。在灾难性错误开始之前,事件处理程序甚至不会被调用。