|
- 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.SCADAControl
- {
- /// <summary>
- /// NewConveyorBelt.xaml 的交互逻辑
- /// </summary>
- public partial class NewConveyorBelt : UserControl, IExecutable
- {
- Path Path_mp = null;
- Path Path_cb = null;
- Storyboard storyboard = new Storyboard();
- Storyboard storyboard1 = new Storyboard();
- public NewConveyorBelt()
- {
- InitializeComponent();
- Width = 1200;
- Height = 400;
- this.SizeChanged += ConveyorBelt_SizeChanged;
- ConveyorBeltWidth = 70;
- Direction = 0;
- StrokeBrush = new SolidColorBrush((System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#00BEFA"));
- StrokeDashArray = new DoubleCollection { 1.5, 1.5 };
- StrokeFillBrush = new SolidColorBrush((System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#00BEFA"));
- StrokeThickness = 2;
- }
-
- public string ControlType => "滚动线";
-
- private bool isExecuteState;
- public bool IsExecuteState
- {
- get { return isExecuteState; }
- set
- {
- isExecuteState = value;
- if (IsExecuteState)
- {
- IsEnabled = true;
- Register();
- Style = null;
- }
- }
- }
-
- public void Register()
- {
- }
-
- public void VisualStateManagerData()
- {
- storyboard.RepeatBehavior = RepeatBehavior.Forever;
- DoubleAnimation dbAscending = new DoubleAnimation
- {
- From = 0,
- To = 100,
- Duration = new Duration(new TimeSpan(0, 0, 20)),
-
- };
- storyboard.Children.Add(dbAscending);
- Storyboard.SetTarget(dbAscending, Path_mp);
- Storyboard.SetTargetProperty(dbAscending, new PropertyPath("StrokeDashOffset"));
-
- storyboard1.RepeatBehavior = RepeatBehavior.Forever;
- DoubleAnimation dbAscending1 = new DoubleAnimation
- {
- From = 0,
- To = -100,
- Duration = new Duration(new TimeSpan(0, 0, 20)),
- };
- storyboard1.Children.Add(dbAscending1);
- Storyboard.SetTarget(dbAscending1, Path_mp);
- Storyboard.SetTargetProperty(dbAscending1, new PropertyPath("StrokeDashOffset"));
- Refursh();
- }
-
- private void ConveyorBelt_SizeChanged(object sender, SizeChangedEventArgs e)
- {
- //查找
- if (!(Path_cb != null && Path_mp != null))
- {
- foreach (Path tb in FindVisualChildren<Path>(this))
- {
- // do something with tb here
- if (tb.Tag != null)
- {
- if (tb.Tag.ToString() == "cb")
- {
- Path_cb = tb;
- }
- else if (tb.Tag.ToString() == "mp")
- {
- Path_mp = tb;
- }
- }
- }
- VisualStateManagerData();
- }
-
-
- //传送带外边框绘制
- 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);
- Path_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);
- Path_mp.Data = geometry1;
- }
- /// <summary>
- /// 搜索指定名称的子元素
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="obj"></param>
- /// <param name="name"></param>
- /// <returns></returns>
- public static T FindChild<T>(DependencyObject obj, string name) where T : FrameworkElement
- {
- for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
- {
- DependencyObject child = VisualTreeHelper.GetChild(obj, i);
- if (child != null && child is T && (child as T).Name.Equals(name))
- return (T)child;
- else
- {
- T childOfChild = FindChild<T>(child, name);
- if (childOfChild != null)
- return childOfChild;
- }
- }
- return null;
- }
-
- public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
- {
- if (depObj != null)
- {
- for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
- {
- DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
- if (child != null && child is T)
- {
- yield return (T)child;
- }
-
- foreach (T childOfChild in FindVisualChildren<T>(child))
- {
- yield return childOfChild;
- }
- }
- }
- }
-
- private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- (d as NewConveyorBelt)?.Refursh();
- }
-
- private void Refursh()
- {
- if (Direction == 1)
- {
- storyboard.Begin();
- storyboard1.Stop();
- // VisualStateManager.GoToState(this, "Left", false);
- }
- else if (Direction == 2)
- {
- storyboard.Stop();
- storyboard1.Begin();
- //VisualStateManager.GoToState(this, "Right", false);
- }
- else
- {
- storyboard.Stop();
- storyboard1.Stop();
- //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(NewConveyorBelt),
- 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(NewConveyorBelt),
- 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(NewConveyorBelt),
- 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(NewConveyorBelt),
- 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(NewConveyorBelt),
- new PropertyMetadata(1.0, new PropertyChangedCallback(OnPropertyChanged)));
-
- [Category("值设定")]
- public int Direction
- {
- get { return (int)GetValue(DirectionProperty); }
- set { SetValue(DirectionProperty, value); }
- }
- public static readonly DependencyProperty DirectionProperty =
- DependencyProperty.Register("Direction", typeof(int), typeof(NewConveyorBelt),
- new PropertyMetadata(0, new PropertyChangedCallback(OnPropertyChanged)));
-
-
- }
- }
|