Анимация непрозрачности Silverlight не работает программно - PullRequest
0 голосов
/ 05 марта 2012

Я новичок в Silverlight и пробую образцы для вещей, анимирующих прозрачность объекта программно.

Я придумал следующий код:

        MapShape myTestShape= RadMapInformationLayer.Items[0] as MapShape;
        SolidColorBrush brush = new SolidColorBrush();
        brush.Color = Colors.Purple;
        myTestShape.Fill = brush;

        //create a duration object
        Duration duration = new Duration(TimeSpan.FromSeconds(5));

        //create the storyboard
        Storyboard story = new Storyboard();

        //create double animation
        DoubleAnimation animation = new DoubleAnimation();

        //set the duration property
        animation.Duration = duration;

        //set the from and too values
        animation.From = 1.0;
        animation.To = 0.0;

        //add the duration to the storyboard
        story.Duration = duration;            

        //now set the target of the animation
        Storyboard.SetTarget(animation, myTestShape);

        //set the target property of this object
        Storyboard.SetTargetProperty(animation, new PropertyPath(UIElement.OpacityProperty));

        //add the double animations to the story board
        story.Children.Add(animation);            

        if (!LayoutRoot.Resources.Contains("story1"))
            LayoutRoot.Resources.Add("story1", story);

        story.Begin();

Для пути свойства я также пробовал:

1.  new PropertyPath("(FrameworkElement.Opacity)")

2.  new PropertyPath("(FrameworkElement.Opacity)")

3.  new PropertyPath("(Control.Opacity)")

И несколько других, мне не повезло с этим.

Кто-нибудь может увидеть, где я иду не так?

Спасибо, Jacques

1 Ответ

1 голос
/ 06 марта 2012

Я делал привязку данных к MapShape.FillProperty раньше.

Попытка:

        //create double animation
        ColorAnimation animation = new ColorAnimation();

        //set the duration property
        animation.Duration = duration;

        //set the from and too values
        animation.From = Colors.Purple;
        animation.To = Colors.Transparent;

        //add the duration to the storyboard
        story.Duration = duration;

        //now set the target of the animation
        Storyboard.SetTarget(animation, rect);

        //set the target property of this object
        Storyboard.SetTargetProperty(animation, new PropertyPath("(MapShape.Fill).Color"));

EDIT:

Что касается того, почему ваш код не работает - при просмотре MapShape.SetShapeFillStroke () выясняется, что Telerik не будет связывать Opacity MapShape с Opacity его внутренней примитивной формы, если вы не предоставите заливку. У вас есть заполнение, определенное в XAML? Если нет, попробуйте предоставить один. В противном случае, возможно, код определен слишком рано в жизненном цикле Shape (во время или после ReadCompleted)?

<telerik:InformationLayer x:Name="StateLayer">
    <telerik:InformationLayer.Reader>
        ...
    </telerik:InformationLayer.Reader>
    <telerik:InformationLayer.ShapeFill>
        <telerik:MapShapeFill Fill="{StaticResource CommonBackgroundLightBrush}" Stroke="#5A636B" StrokeThickness="1" />
    </telerik:InformationLayer.ShapeFill>
...