Возможно, я пропустил что-то действительно очевидное. Я пытаюсь написать пользовательскую панель, в которой содержимое выложено в соответствии с несколькими свойствами зависимостей (я предполагаю, что они имеют, чтобы быть 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 (что абсолютно необходимо в любом случае), а результат тот же. Обработчик событий даже не вызывается до того, как произойдет катастрофическая ошибка.