/// <summary> /// Initializes a new instance of the App class. /// </summary> public App() { // Reference something in the Themes namespace in order to get the // system to load it (in order to use it in the resource // dictionaries). #pragma warning disable 0219 ButtonChrome chrome = new ButtonChrome(); #pragma warning restore 0219 }
private void AddMeasures() { foreach (var measurement in _measurements) { var line = new Line { Stroke = new SolidColorBrush(Colors.Yellow), StrokeThickness = 2, X1 = measurement.StartPoint.X - (4 * ScrollPosition), Y1 = measurement.StartPoint.Y, X2 = measurement.EndPoint.X - (4 * ScrollPosition), Y2 = measurement.EndPoint.Y }; Panel.SetZIndex(line, 2); ControlCanvas.Children.Add(line); var startPoint = new Point(line.X1, line.Y1); var endPoint = new Point(line.X2, line.Y2); var v = startPoint - endPoint; var midpoint = endPoint + (v / 2); var theta = Math.Atan2(v.Y, v.X); var offset = Math.PI / 2; if (v.Y > 0) { offset = -Math.PI / 2; } var theta2 = theta + offset; var x4 = 10 * Math.Cos(theta2) + midpoint.X; var y4 = 10 * Math.Sin(theta2) + midpoint.Y; var x3 = 30 * Math.Cos(theta2) + midpoint.X; var y3 = 30 * Math.Sin(theta2) + midpoint.Y; var redline = new Line { Stroke = new SolidColorBrush(Colors.Yellow), X1 = x4, Y1 = y4, X2 = x3, Y2 = y3, StrokeThickness = 2 }; // anchor points AddAnchor(startPoint); AddAnchor(endPoint); var panel = new StackPanel(); var outerBorder = new Border { Background = new SolidColorBrush(Color.FromArgb(0xa2, 0xaf, 0x2a, 0x2a)), CornerRadius = new CornerRadius(4), }; var innerBorder = new Border { Margin = new Thickness(4), Background = new SolidColorBrush(Color.FromArgb(0xa2, 0xf2, 0xda, 0xc7)), CornerRadius = new CornerRadius(4) }; panel.Children.Add(outerBorder); outerBorder.Child = innerBorder; var grid = new Grid { Margin = new Thickness(5) }; grid.ColumnDefinitions.Add(new ColumnDefinition()); grid.ColumnDefinitions.Add(new ColumnDefinition()); var rowDefinition = new RowDefinition(); rowDefinition.Height = new GridLength(1, GridUnitType.Auto); grid.RowDefinitions.Add(rowDefinition); grid.RowDefinitions.Add(new RowDefinition()); grid.RowDefinitions.Add(new RowDefinition()); var voltageLabel = new Label { Foreground = new SolidColorBrush(Colors.Brown), Margin = new Thickness(0, 0, 2, 0), Content = "Voltage:", VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Right, FontSize = 10.0 }; var voltageValueLabel = new Label { FontWeight = FontWeights.Bold, Foreground = new SolidColorBrush(Colors.White), Content = measurement.VoltageMeasure, VerticalAlignment = VerticalAlignment.Center, FontSize = 10.0 }; var timeLabel = new Label { Foreground = new SolidColorBrush(Colors.Brown), Margin = new Thickness(0, 0, 2, 0), Content = "Time:", VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Right, FontSize = 10.0 }; var timeValueLabel = new Label { FontWeight = FontWeights.Bold, Foreground = new SolidColorBrush(Colors.White), Content = measurement.TimeMeasure, VerticalAlignment = VerticalAlignment.Center, FontSize = 10.0 }; var button = new ButtonChrome(); button.Content = "X"; button.HorizontalAlignment = HorizontalAlignment.Right; button.FontSize = 10.0; button.Padding = new Thickness(4); button.CornerRadius = new CornerRadius(4); button.Cursor = Cursors.Hand; button.MouseDown += ButtonOnMouseDown; Grid.SetColumn(voltageValueLabel, 1); Grid.SetColumn(timeValueLabel, 1); Grid.SetRow(voltageLabel, 1); Grid.SetRow(voltageValueLabel, 1); Grid.SetRow(timeLabel, 2); Grid.SetRow(timeValueLabel, 2); Grid.SetColumn(button, 1); var title = new Label(); title.Content = "Measurement"; title.FontSize = 10; title.HorizontalAlignment = HorizontalAlignment.Right; title.Foreground = new SolidColorBrush(Colors.White); title.FontWeight = FontWeights.Bold; grid.Children.Add(title); grid.Children.Add(voltageLabel); grid.Children.Add(voltageValueLabel); grid.Children.Add(timeLabel); grid.Children.Add(timeValueLabel); grid.Children.Add(button); innerBorder.Child = grid; panel.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); var top = y3; if ((endPoint.X <= startPoint.X && endPoint.Y <= startPoint.Y) || (endPoint.X >= startPoint.X && endPoint.Y >= startPoint.Y)) { top -= panel.DesiredSize.Height; } Panel.SetZIndex(panel, 1); Canvas.SetLeft(panel, x3); Canvas.SetTop(panel, top); var polyLineArrowHead = AddArrowHead(midpoint, theta2); ControlCanvas.Children.Add(redline); ControlCanvas.Children.Add(polyLineArrowHead); ControlCanvas.Children.Add(panel); } }