Pouvez-vous animer une propriété de dépendance personnalisée dans Silverlight?

StackOverflow https://stackoverflow.com/questions/62382

  •  09-06-2019
  •  | 
  •  

Question

Il se peut que je manque quelque chose de vraiment évident. J'essaie d'écrire un panneau personnalisé dont le contenu est présenté en fonction de quelques propriétés de dépendance (je suppose qu'ils doivent être des PDD, car je veux pouvoir les animer.)

Toutefois, lorsque j'essaie d'exécuter un storyboard pour animer ces deux propriétés, Silverlight génère une erreur catastophic. Mais si j'essaie d'animer un seul d'entre eux, cela fonctionne bien. Et si j'essaie d'animer une de mes propriétés et une propriété "intégrée" (comme Opacity), cela fonctionne également. Mais si j'essaie d'animer mes deux propriétés personnalisées, l'erreur Catastrophic est signalée.

Quelqu'un d'autre a-t-il rencontré cela?

modifier:

Les deux PDD sont ScaleX et ScaleY - les deux en double. Ils échelonnent les positions X et Y des enfants dans le panneau. Voici comment l’un d’eux est défini:

    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);
    }

Modifier: je l’ai essayé avec et sans l’appel de InvalidateArrange (ce qui est absolument nécessaire dans tous les cas) et le résultat est identique. Le gestionnaire d'événements n'est même pas appelé avant le déclenchement de l'erreur catastrophique.

Était-ce utile?

La solution

Il s'agit d'un bogue documenté avec Silverlight 2 Beta 2. Vous ne pouvez pas animer deux propriétés de dépendance personnalisées sur le même objet.

Autres conseils

Je voudrais essayer de commenter InvalidateArrange dans OnPropertyChanged et voir ce qui se passe.

J'espère que ce n'est pas une mauvaise forme pour répondre à ma propre question.

Silverlight 2 Release Candidate 0 est disponible aujourd'hui, j'ai déjà testé ce problème et il semble avoir été corrigé. Les deux PDD personnalisés de mon panneau de test peuvent désormais être animés correctement. Ainsi, l'application se comporte comme prévu. Ce qui est bien.

Notez que cette RC est uniquement une RC pour développeurs, de sorte que la version standard de Silverlight n’a pas été mise à jour. Je m'attendrais cependant à ce qu'il soit complètement publié le mois prochain.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top