using Aitex.Core.RT.Log; using SciChart.Charting.ChartModifiers; using SciChart.Charting.Visuals.Annotations; using SciChart.Data.Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory { /// /// ProcessDetailView.xaml 的交互逻辑 /// public partial class ProcessDetailView : UserControl { private ProcessDetailViewModel processDetail; public ProcessDetailView() { InitializeComponent(); } private void OnAnnotationCreated(object sender, AnnotationCreationArgs e) { if (e.NewAnnotation is LineArrowAnnotation newAnnotation) { try { processDetail = DataContext as ProcessDetailViewModel; if (processDetail != null) { double x1 = 0, y1 = 0, x2 = 0, y2 = 0, temp = 0; if (newAnnotation.X1 is Double xx1) x1 = xx1; if (newAnnotation.X2 is Double xx2) x2 = xx2; if (newAnnotation.Y1 is Double yy1) y1 = yy1; if (newAnnotation.Y2 is Double yy2) y2 = yy2; if (x1 > x2) { temp = x1; x1 = x2; x2 = temp; } processDetail.VisibleRangeTime = new DoubleRange() { Min = x1, Max = x2 }; LOG.Info($"LineArrowAnnotation x1[{x1},x2[{x2}]]"); if (y1 > y2) { temp = y1; y1 = y2; y2 = temp; } processDetail.VisibleRangeValue = new DoubleRange() { Min = y1, Max = y2 }; LOG.Info($"LineArrowAnnotation y1[{y1},y2[{y2}]]"); } if(!sciChart.Annotations.Remove(newAnnotation)) syncChart?.Annotations?.Remove(newAnnotation); ZoomByLine.IsChecked = false; } catch(Exception ex) { LOG.Info($"LineArrowAnnotation:{ex.StackTrace}-{ex.Message}"); } } } private void RadioButton_Checked(object sender, RoutedEventArgs e) { if(sender is RadioButton radio) { switch (radio.Name) { case "ShowVerticalLine": if (sliceModifier.VerticalLines == null || sliceModifier.VerticalLines.Count == 0) { sliceModifier.VerticalLines.Add(new VerticalLineAnnotation() { X1 = 0 }); sciChart.MouseLeftButtonUp += sciChart_MouseLeftButtonUp; } break; case "DeleteVertical": sliceModifier.VerticalLines.Clear(); break; } } e.Handled = true; } private void ShowVetical_UnChecked(object sender, RoutedEventArgs e) { HoldVetical.IsChecked = false; sciChart.MouseLeftButtonUp -= sciChart_MouseLeftButtonUp; e.Handled = true; } private void SelectSeries_Unchecked(object sender, RoutedEventArgs e) { foreach (var item in sciChart.RenderableSeries) { if(item.IsSelected) item.IsSelected = false; } foreach (var item in syncChart.RenderableSeries) { if (item.IsSelected) item.IsSelected = false; } e.Handled = true; } private void sciChart_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (ShowVerticalLine.IsChecked == true && HoldVetical.IsChecked == false) { var vertical = sliceModifier.VerticalLines?.FirstOrDefault(); if (vertical != null) vertical.X1 = rolloverModifier.SeriesData.SeriesInfo.FirstOrDefault().XValue; } e.Handled = true; } private void Button_Click(object sender, RoutedEventArgs e) { if (sender is Button btn) { if (btn.Name == "MoveToLower") { var series=sciChart.SelectedRenderableSeries.FirstOrDefault(); if (series == null) return; sciChart.RenderableSeries.Remove(series); syncChart.RenderableSeries.Add(series); if (syncChart.Visibility != Visibility.Visible) { Grid.SetRowSpan(sciChart, 1); syncChart.Visibility = Visibility.Visible; } } else if (btn.Name == "MoverToUpper") { var series = syncChart.SelectedRenderableSeries.FirstOrDefault(); if (series == null) return; syncChart.RenderableSeries.Remove(series); sciChart.RenderableSeries.Add(series); if (syncChart.RenderableSeries == null || syncChart.RenderableSeries.Count == 0) { syncChart.Visibility = Visibility.Hidden; Grid.SetRowSpan(sciChart, 2); } } } } } }