Puoi animare una proprietà di dipendenza personalizzata in Silverlight?
-
09-06-2019 - |
Domanda
Potrei perdermi qualcosa di veramente ovvio.Sto cercando di scrivere un pannello personalizzato in cui i contenuti sono disposti in base a un paio di proprietà di dipendenza (presumo che siano Avere essere DP perché voglio poterli animare.)
Tuttavia, quando provo a eseguire uno storyboard per animare entrambe queste proprietà, Silverlight genera un errore catastrofico.Ma se provo ad animarne solo uno, funziona bene.E se provo ad animare una delle mie proprietà e una proprietà "incorporata" (come Opacità), funziona anche.Ma se provo ad animare entrambe le mie proprietà personalizzate, ottengo l'errore Catastrofico.
Qualcun altro si è imbattuto in questo?
modificare:
I due DP sono ScaleX e ScaleY, entrambi doppi.Ridimensionano la posizione X e Y dei bambini nel pannello.Ecco come viene definito uno di essi:
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);
}
Modificare:L'ho provato con e senza la chiamata a InvalidateArrange (che è assolutamente necessaria in ogni caso) e il risultato è lo stesso.Il gestore eventi non viene nemmeno chiamato prima che si verifichi l'errore catastrofico.
Soluzione
È un bug documentato con Silverlight 2 Beta 2.Non è possibile animare due proprietà di dipendenza personalizzate sullo stesso oggetto.
Altri suggerimenti
Vorrei provare a commentare InvalidateArrange in OnPropertyChanged e vedere cosa succede.
Spero che non sia una cattiva forma rispondere alla mia stessa domanda.
Silverlight 2 Release Candidate 0 è stato rilasciato oggi, ho testato questo problema e sembra che sia stato risolto.Entrambi i DP personalizzati nel mio pannello di test ora possono essere animati correttamente, quindi l'app si comporta come previsto.Il che è carino.
Tieni presente che questo RC è solo un RC basato sullo sviluppatore, quindi la build standard di Silverlight non è stata aggiornata.Mi aspetto che venga rilasciato completamente nel prossimo mese, però.