protected override void OnPoint_PositionChanged(object sender, PositionChangedEventArgs e) { DraggablePoint marker = (DraggablePoint)sender; // adjusting position to fit inside allowed region var region = AllowedRegion; var position = e.Position; if (position.X < region.XMin) { position.X = region.XMin; } if (position.Y < region.YMin) { position.Y = region.YMin; } if (position.X > region.XMax) { position.X = region.XMax; } if (position.Y > region.YMax) { position.Y = region.YMax; } marker.Position = position; marker.DataContext = position; var index = DevMarkerChart.GetIndex(marker); if (0 <= index && index < Points.Count && !ProtectedPoints.Changing) { Points[index] = position; } }
protected virtual void OnPoint_PositionChanged(object sender, PositionChangedEventArgs e) { FrameworkElement marker = (FrameworkElement)sender; var index = DevMarkerChart.GetIndex(marker); marker.DataContext = e.Position; if (0 <= index && index < points.Count && !points.Changing) { points[index] = e.Position; } }
private void element_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { FrameworkElement clickedElement = (FrameworkElement)sender; int index = DevMarkerChart.GetIndex(clickedElement); if (index >= 0) { Point point = selector.Points[index]; selector.Points.RemoveAt(index); //plotter.UndoProvider.AddAction(new CollectionRemoveAction<Point>(selector.Points, point, index)); e.Handled = true; } }
public void TestAddAndRemoveItems() { ChartPlotter plotter = new ChartPlotter(); plotter.PerformLoad(); DevMarkerChart chart = new DevMarkerChart(); chart.MarkerBuilder = new EllipseMarker(); plotter.Children.Add(chart); ObservableCollection <Point> source = new ObservableCollection <Point>(); chart.ItemsSource = source; const int count = 10; // stage 1 for (int i = 0; i < count; i++) { source.Add(new Point()); Assert.AreEqual(source.Count, chart.Items.Count); } for (int i = count - 1; i >= 0; i--) { source.RemoveAt(i); Assert.AreEqual(source.Count, chart.Items.Count); } // stage 2 for (int i = 0; i < count; i++) { source.Add(new Point()); Assert.AreEqual(source.Count, chart.Items.Count); } Random rnd = new Random(); for (int i = count - 1; i >= 0; i--) { int index = rnd.Next(0, source.Count - 1); source.RemoveAt(index); Assert.AreEqual(source.Count, chart.Items.Count); } // todo check that all items are visible }