|
public MainWindow()
{
InitializeComponent();
ViewModel viewModel = new ViewModel();
for (int i = 0; i < 5; i++)
{
SfChart chart = new SfChart();
chart.Height = 200;
chart.Width = 300;
chart.Annotations.Add(new RectangleAnnotation()
{
CoordinateUnit=CoordinateUnit.Axis
});
..
chart.MouseMove += Chart_MouseMove;
chart.MouseDown += Chart_MouseDown;
chart.MouseUp += Chart_MouseUp;
chart.Behaviors.Add(new ChartZoomPanBehavior());
panel.Children.Add(chart);
}
}
private void Chart_MouseUp(object sender, MouseButtonEventArgs e)
{
isMouseDown = false;
}
bool isMouseDown;
private void Chart_MouseDown(object sender, MouseButtonEventArgs e)
{
UpdateAnnotation(true, sender, e);
isMouseDown = true;
}
private void Chart_MouseMove(object sender, MouseEventArgs e)
{
if (!isMouseDown) return;
UpdateAnnotation(false, sender, e);
}
private void UpdateAnnotation(bool isMouseDown, object sender, MouseEventArgs e)
{
var chart = sender as SfChart;
Point pt = e.GetPosition(chart);
pt = new Point(pt.X - chart.SeriesClipRect.Left - chart.Margin.Left,
pt.Y - chart.SeriesClipRect.Top - chart.Margin.Top);
foreach (SfChart item in panel.Children)
{
var x = item.PointToValue(item.PrimaryAxis, pt);
var y = item.PointToValue(item.SecondaryAxis, pt);
RectangleAnnotation annotation = item.Annotations[0] as RectangleAnnotation;
if(isMouseDown)
{
annotation.X1 = x;
annotation.Y1 = y;
}
annotation.X2 = x;
annotation.Y2 = y;
}
} |
Thank you very much for your quick support!
Your example has helped me to move forward!
I have one more question. Would it be possible to open a context menu within an annotation? This would allow users to select an action for the selected area.
Thank you very much
Sascha
|
RectangleAnnotation rectangleAnnotation = new RectangleAnnotation()
{
CoordinateUnit = CoordinateUnit.Axis
};
ContextMenu contextMenu = new ContextMenu();
contextMenu.Items.Add("Item 1");
contextMenu.Items.Add("Item 2");
(rectangleAnnotation.GetRenderedAnnotation() as FrameworkElement).ContextMenu = contextMenu;
chart.Annotations.Add(rectangleAnnotation); |
|
chart.MouseMove += Chart_MouseMove;
chart.MouseLeftButtonDown += Chart_MouseDown;
chart.MouseLeftButtonUp += Chart_MouseUp;
panel.Children.Add(chart); |