using System; using System.Collections.Generic; using System.ComponentModel; 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.Animation; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace BPASmartClient.CustomResource.UserControls { /// /// ConveyorBelt.xaml 的交互逻辑 /// public partial class ConveyorBelt : UserControl { public ConveyorBelt() { InitializeComponent(); this.SizeChanged += ConveyorBelt_SizeChanged; } private void ConveyorBelt_SizeChanged(object sender, SizeChangedEventArgs e) { //传送带外边框绘制 PathGeometry geometry = new PathGeometry(); PathFigure pathFigure = new PathFigure(); pathFigure.StartPoint = new Point(this.Height / 2, 0); pathFigure.Segments.Add(new ArcSegment(new Point(this.Height / 2, this.Height), new Size(this.Height / 2, this.Height / 2), 0, false, SweepDirection.Counterclockwise, true)); pathFigure.Segments.Add(new LineSegment(new Point(this.Width, this.Height), true)); pathFigure.Segments.Add(new LineSegment(new Point(this.Width, this.Height - ConveyorBeltWidth), true)); double innerCircle = (this.Height - (ConveyorBeltWidth * 2)) / 2;//内圆半径 pathFigure.Segments.Add(new LineSegment(new Point(ConveyorBeltWidth + innerCircle, this.Height - ConveyorBeltWidth), true)); pathFigure.Segments.Add(new ArcSegment(new Point(ConveyorBeltWidth + innerCircle, ConveyorBeltWidth), new Size(innerCircle, innerCircle), 0, false, SweepDirection.Clockwise, true)); pathFigure.Segments.Add(new LineSegment(new Point(this.Width, ConveyorBeltWidth), true)); pathFigure.Segments.Add(new LineSegment(new Point(this.Width, 0), true)); pathFigure.Segments.Add(new LineSegment(new Point(this.Height / 2, 0), true)); geometry.Figures.Add(pathFigure); this.cb.Data = geometry; //传送带内部皮带绘制 PathGeometry geometry1 = new PathGeometry(); PathFigure pathFigure1 = new PathFigure(); pathFigure1.StartPoint = new Point(this.Width, ConveyorBeltWidth / 2); double innerCircle1 = (this.Height - ConveyorBeltWidth) / 2;//内圆半径 pathFigure1.Segments.Add(new LineSegment(new Point(innerCircle1 + ConveyorBeltWidth / 2, ConveyorBeltWidth / 2), true)); pathFigure1.Segments.Add(new ArcSegment(new Point(innerCircle1 + ConveyorBeltWidth / 2, this.Height - ConveyorBeltWidth / 2), new Size(innerCircle1, innerCircle1), 0, false, SweepDirection.Counterclockwise, true)); pathFigure1.Segments.Add(new LineSegment(new Point(this.Width, this.Height - ConveyorBeltWidth / 2), true)); geometry1.Figures.Add(pathFigure1); this.mp.Data = geometry1; } private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { (d as ConveyorBelt)?.Refursh(); } private void Refursh() { if (Direction == 1) VisualStateManager.GoToState(this, "Left", false); else if (Direction == 2) VisualStateManager.GoToState(this, "Right", false); else VisualStateManager.GoToState(this, "Stop", false); } public DoubleCollection StrokeDashArray { get { return (DoubleCollection)GetValue(StrokeDashArrayProperty); } set { SetValue(StrokeDashArrayProperty, value); } } public static readonly DependencyProperty StrokeDashArrayProperty = DependencyProperty.Register("StrokeDashArray", typeof(DoubleCollection), typeof(ConveyorBelt), new PropertyMetadata(default, new PropertyChangedCallback(OnPropertyChanged))); public double ConveyorBeltWidth { get { return (double)GetValue(ConveyorBeltWidthProperty); } set { SetValue(ConveyorBeltWidthProperty, value); } } public static readonly DependencyProperty ConveyorBeltWidthProperty = DependencyProperty.Register("ConveyorBeltWidth", typeof(double), typeof(ConveyorBelt), new PropertyMetadata(50.0, new PropertyChangedCallback(OnPropertyChanged))); public Brush StrokeFillBrush { get { return (Brush)GetValue(StrokeFillBrushProperty); } set { SetValue(StrokeFillBrushProperty, value); } } public static readonly DependencyProperty StrokeFillBrushProperty = DependencyProperty.Register("StrokeFillBrush", typeof(Brush), typeof(ConveyorBelt), new PropertyMetadata(Brushes.LightBlue, new PropertyChangedCallback(OnPropertyChanged))); public Brush StrokeBrush { get { return (Brush)GetValue(StrokeBrushProperty); } set { SetValue(StrokeBrushProperty, value); } } public static readonly DependencyProperty StrokeBrushProperty = DependencyProperty.Register("StrokeBrush", typeof(Brush), typeof(ConveyorBelt), new PropertyMetadata(Brushes.LightBlue, new PropertyChangedCallback(OnPropertyChanged))); public double StrokeThickness { get { return (double)GetValue(StrokeThicknessProperty); } set { SetValue(StrokeThicknessProperty, value); } } public static readonly DependencyProperty StrokeThicknessProperty = DependencyProperty.Register("StrokeThickness", typeof(double), typeof(ConveyorBelt), new PropertyMetadata(1.0, new PropertyChangedCallback(OnPropertyChanged))); public int Direction { get { return (int)GetValue(DirectionProperty); } set { SetValue(DirectionProperty, value); } } public static readonly DependencyProperty DirectionProperty = DependencyProperty.Register("Direction", typeof(int), typeof(ConveyorBelt), new PropertyMetadata(0, new PropertyChangedCallback(OnPropertyChanged))); } }