BounceEase и silverlight 4 BarSeries - PullRequest
1 голос
/ 21 мая 2010

Я пытаюсь заставить серию баров «отскочить» при рисовании, я предполагал, что это сделает функция BounceEase TransitionEasingFunction, но линии просто исчезают, я разместил ниже xaml и код, знает ли кто-нибудь, куда я ушел не так или это сложнее, чем я, я довольно плохо знаком с silverlight

XAML

<Grid x:Name="LayoutRoot" Background="White">
    <chartingToolkit:Chart x:Name="MyChart">
        <chartingToolkit:BarSeries Title="Sales" ItemsSource="{Binding}" IndependentValuePath="Name" DependentValuePath="Value" AnimationSequence="FirstToLast" TransitionDuration="00:00:3">
            <chartingToolkit:BarSeries.TransitionEasingFunction>
                <BounceEase EasingMode="EaseInOut" Bounciness="5" />
            </chartingToolkit:BarSeries.TransitionEasingFunction>
            <chartingToolkit:BarSeries.DataPointStyle>
                <Style TargetType="Control">
                    <Setter Property="Background" Value="Red"/>
                </Style>
            </chartingToolkit:BarSeries.DataPointStyle>
        </chartingToolkit:BarSeries>
        <chartingToolkit:Chart.Axes>
            <chartingToolkit:LinearAxis Title="Types owned"  Orientation="X" Minimum="0" Maximum="300" 
              Interval="10" ShowGridLines="True"  FontStyle='Italic'/>
        </chartingToolkit:Chart.Axes>
    </chartingToolkit:Chart>

</Grid>

код позади

public class MyClass : DependencyObject
    {
        public string Name { get; set; }
        public Double Value {
            get { return (Double)GetValue(myValueProperty); } 
            set{SetValue(myValueProperty,value);} 
        }
        public static readonly DependencyProperty myValueProperty =
            DependencyProperty.Register("Value", typeof(Double), typeof(MyClass), null);
    }

public MainPage()
        {
            InitializeComponent();
            //Get the data
            IList<MyClass> l = this.GetData();
            //Get a reference to the SL Chart

        MyChart.DataContext = l.OrderBy(e => e.Value);
        //Find the highest number and round it up to the next digit
        DispatcherTimer myDispatcherTimer = new DispatcherTimer();
        myDispatcherTimer.Interval = new TimeSpan(0, 0, 0, 5, 0); // 100 Milliseconds 
        myDispatcherTimer.Tick += new EventHandler(Each_Tick);
        myDispatcherTimer.Start();

    }
    public void Each_Tick(object o, EventArgs sender)
    {
        ((BarSeries)MyChart.Series[0]).DataContext = GetData();
    }

    private IList<MyClass> GetData()
    {
        Random random = new Random();

        return new List<MyClass>()
        {
            new MyClass() {Name="Bob Zero",Value=(random.NextDouble() * 100.0)},
             new MyClass() {Name="Bob One",Value=(random.NextDouble() * 100.0)},
              new MyClass() {Name="Bob Two",Value=(random.NextDouble() * 100.0)},
               new MyClass() {Name="Bob Three",Value=(random.NextDouble() * 100.0)}
        };
    }

1 Ответ

0 голосов
/ 21 мая 2010

Имя BounceEase относится к тому, как изменяемое значение изменяется во время анимации. BounceEase изменяет значение, как вы можете себе представить, как подпрыгивающий мяч. Графики в документации описывают это.

Ключевым моментом является то, что в конечном итоге анимации просто меняют значение, которое они на самом деле не понимают, каков визуальный эффект изменения значения. В этом случае анимируемым значением является непрозрачность DataPoint. Следовательно, с легкостью отскока он, кажется, немного исчезает, затем исчезает, затем исчезает еще немного и так далее, пока не полностью исчезнет.

Создание нового шаблона для DataPoint потребовало бы немного больше усилий, чтобы получить желаемый эффект.

...