Você pode animar uma propriedade de dependência personalizada no Silverlight?

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

  •  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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top