NavigationBar.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System.Windows;
  2. using System.Windows.Controls;
  3. using System.Windows.Media.Animation;
  4. using Jamesnet.Wpf.Animation;
  5. using Jamesnet.Wpf.Controls;
  6. namespace Waaagh.CustomControl {
  7. public class NavigationBar: ListBox {
  8. private ValueItem _vi;
  9. private Storyboard _sb;
  10. static NavigationBar() {
  11. DefaultStyleKeyProperty.OverrideMetadata(typeof(NavigationBar), new FrameworkPropertyMetadata(typeof(NavigationBar)));
  12. }
  13. public override void OnApplyTemplate() {
  14. base.OnApplyTemplate();
  15. Grid grid = (Grid)GetTemplateChild("PART_Circle");
  16. InitStoryboard(grid);
  17. }
  18. private void InitStoryboard(Grid circle) {
  19. _vi = new();
  20. _sb = new();
  21. _vi.Mode = EasingFunctionBaseMode.QuinticEaseInOut;
  22. _vi.Property = new PropertyPath(Canvas.LeftProperty);
  23. _vi.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 500));
  24. Storyboard.SetTarget(_vi, circle);
  25. Storyboard.SetTargetProperty(_vi, _vi.Property);
  26. _sb.Children.Add(_vi);
  27. }
  28. protected override void OnSelectionChanged(SelectionChangedEventArgs e) {
  29. base.OnSelectionChanged(e);
  30. _vi.To = SelectedIndex * 80;
  31. _sb.Begin();
  32. }
  33. }
  34. }