¿Puedes animar una propiedad de dependencia personalizada en Silverlight?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

Puede que me esté perdiendo algo realmente obvio.Estoy intentando escribir un Panel personalizado donde los contenidos se distribuyen de acuerdo con un par de propiedades de dependencia (supongo que tener ser directores de fotografía porque quiero poder animarlos).

Sin embargo, cuando intento ejecutar un guión gráfico para animar ambas propiedades, Silverlight arroja un error catastrófico.Pero si intento animar sólo uno de ellos, funciona bien.Y si intento animar una de mis propiedades y una propiedad "integrada" (como Opacidad), también funciona.Pero si intento animar mis dos propiedades personalizadas, aparece el error Catastrófico.

¿A alguien más le da esa impresión?

editar:

Los dos DP son ScaleX y ScaleY, ambos dobles.Escalan la posición X e Y de los niños en el panel.Así es como se define uno de ellos:

    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:Lo probé con y sin la llamada a InvalidateArrange (que es absolutamente necesaria en cualquier caso) y el resultado es el mismo.Ni siquiera se llama al controlador de eventos antes de que comience el error catastrófico.

¿Fue útil?

Solución

Es un error documentado con Silverlight 2 Beta 2.No puedes animar dos propiedades de dependencia personalizadas en el mismo objeto.

Otros consejos

Intentaría comentar InvalidateArrange en OnPropertyChanged y ver qué sucede.

Espero que no sea de mala educación responder mi propia pregunta.

Silverlight 2 Release Candidate 0 se lanzó hoy, probé este problema y parece haberse solucionado.Ambos DP personalizados en mi panel de prueba ahora se pueden animar correctamente, por lo que la aplicación se comporta como se esperaba.Lo cual es bueno.

Tenga en cuenta que este RC es sólo un RC basado en desarrolladores, por lo que la versión estándar de Silverlight no se ha actualizado.Sin embargo, espero que se publique por completo el próximo mes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top