Você pode animar uma propriedade de dependência personalizada no Silverlight?
-
09-06-2019 - |
Pergunta
Posso estar perdendo algo realmente óbvio.Estou tentando escrever um painel personalizado onde o conteúdo é organizado de acordo com algumas propriedades de dependência (presumo que elas ter ser DPs porque quero poder animá-los.)
No entanto, quando tento executar um storyboard para animar essas duas propriedades, o Silverlight gera um erro catastófico.Mas se eu tentar animar apenas um deles, funciona bem.E se eu tentar animar uma das minhas propriedades e uma propriedade 'integrada' (como Opacidade), também funciona.Mas se eu tentar animar ambas as minhas propriedades personalizadas, recebo o erro Catastrófico.
Alguém mais se deparou com isso?
editar:
Os dois DPs são ScaleX e ScaleY – ambos duplos.Eles dimensionam a posição X e Y dos filhos no painel.Veja como um deles é definido:
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);
}
Editar:Eu tentei com e sem a chamada para InvalidateArrange (que é absolutamente necessária em qualquer caso) e o resultado é o mesmo.O manipulador de eventos nem mesmo é chamado antes do início do erro Catastrófico.
Solução
É um bug documentado no Silverlight 2 Beta 2.Não é possível animar duas propriedades de dependência personalizadas no mesmo objeto.
Outras dicas
Eu tentaria comentar InvalidateArrange em OnPropertyChanged e ver o que acontece.
Espero que não seja uma má educação responder à minha própria pergunta.
O Silverlight 2 Release Candidate 0 foi lançado hoje, testei esse problema nele e parece ter sido corrigido.Ambos os DPs personalizados em meu painel de teste agora podem ser animados corretamente, de modo que o aplicativo está se comportando conforme o esperado.Que é bom.
Observe que este RC é apenas um RC baseado em desenvolvedor, portanto a versão padrão do Silverlight não foi atualizada.Eu espero que seja totalmente lançado no próximo mês, no entanto.