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 BPASmartClient.CustomResource.UserControls { /// /// Bottle.xaml 的交互逻辑 /// public partial class Bottle : UserControl { public Bottle() { InitializeComponent(); this.SizeChanged += Bottle_SizeChanged; } private void Bottle_SizeChanged(object sender, SizeChangedEventArgs e) { e1.Width = this.Width; e1.Height = this.Height * 0.09; r1.Width = this.Width; r1.Height = this.Height * 0.8; Canvas.SetTop(r1, e1.Height / 2); bd.Width = this.Width * 0.6; bd.Height = this.Height * 0.06; Canvas.SetLeft(bd, (this.Width - bd.Width) / 2); Canvas.SetBottom(bd, 0); e2.Width = this.Width; e2.Height = this.Height * 0.09; Canvas.SetTop(e2, r1.Height); Canvas.SetLeft(e2, 0); PathGeometry geometry = new PathGeometry(); PathFigure pathFigure = new PathFigure(); pathFigure.StartPoint = new Point(0, r1.Height + (e1.Height / 2)); pathFigure.Segments.Add(new LineSegment(new Point(Canvas.GetLeft(bd), this.Height - bd.Height), true)); pathFigure.Segments.Add(new LineSegment(new Point(Canvas.GetLeft(bd) + bd.Width, this.Height - bd.Height), true)); pathFigure.Segments.Add(new LineSegment(new Point(this.Width, r1.Height + (e1.Height / 2)), true)); pathFigure.Segments.Add(new LineSegment(new Point(0, r1.Height + (e1.Height / 2)), true)); geometry.Figures.Add(pathFigure); this.pa.Data = geometry; Canvas.SetTop(this.pa, r1.Height + (e1.Height / 2)); Canvas.SetLeft(this.pa, 0); refile.Width = this.Width; Canvas.SetBottom(refile, this.Height - r1.Height - (e1.Height / 2)); Refresh(); } private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { (d as Bottle)?.Refresh(); } private void Refresh() { double height = LinearConvert(CurrentValue, r1.Height, 0F, 100F, 0F); refile.Height = height; } private double LinearConvert(double IntputValue, double OSH, double OSL, double ISH, double ISL) { if (IntputValue >= ISH) return OSH; if (IntputValue <= ISL) return OSL; return (IntputValue - ISL) * (OSH - OSL) / (ISH - ISL) + OSL; } public double CurrentValue { get { return (double)GetValue(CurrentValueProperty); } set { SetValue(CurrentValueProperty, value); } } public static readonly DependencyProperty CurrentValueProperty = DependencyProperty.Register("CurrentValue", typeof(double), typeof(Bottle), new PropertyMetadata(0.0, new PropertyChangedCallback(OnPropertyChanged))); } }