using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Linq;
|
using System.Reflection;
|
using System.Runtime.InteropServices.ComTypes;
|
using System.Security.Cryptography;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Windows;
|
using System.Windows.Controls;
|
using System.Windows.Controls.Primitives;
|
using System.Windows.Input;
|
using System.Windows.Media;
|
using System.Windows.Shapes;
|
using XHandler.Class;
|
|
namespace XHandler.Controls
|
{
|
/// <summary>
|
/// 板位类型耗材
|
/// </summary>
|
public class ShelfLabware : Grid
|
{
|
//private int nBaseWidth = 16;
|
//private int nBaseHeight = 9;
|
/// <summary>
|
/// 耗材的宽(真实比例换算之后的像素宽度)
|
/// </summary>
|
public double ShelfWidth
|
{
|
get { return (double)GetValue(ShelfWidthProperty); }
|
set { SetValue(ShelfWidthProperty, value); }
|
}
|
public static readonly DependencyProperty ShelfWidthProperty =
|
DependencyProperty.Register("ShelfWidth", typeof(double), typeof(ShelfLabware), new PropertyMetadata(Double.NaN));
|
|
/// <summary>
|
/// 耗材的长(真实比例换算之后的像素宽度)
|
/// </summary>
|
public double ShelfLength
|
{
|
get { return (double)GetValue(ShelfLengthProperty); }
|
set { SetValue(ShelfLengthProperty, value); }
|
}
|
public static readonly DependencyProperty ShelfLengthProperty =
|
DependencyProperty.Register("ShelfLength", typeof(double), typeof(ShelfLabware), new PropertyMetadata(Double.NaN));
|
|
/// <summary>
|
/// 板位的名称
|
/// </summary>
|
public string ShelfName
|
{
|
get { return (string)GetValue(ShelfNameProperty); }
|
set { SetValue(ShelfNameProperty, value); }
|
}
|
public static readonly DependencyProperty ShelfNameProperty =
|
DependencyProperty.Register("ShelfName", typeof(string), typeof(ShelfLabware), new PropertyMetadata("", OnLabelChanged));
|
|
/// <summary>
|
/// 板位是垃圾桶
|
/// </summary>
|
public bool ShelfTrash
|
{
|
get { return (bool)GetValue(ShelfTrashProperty); }
|
set { SetValue(ShelfTrashProperty, value); }
|
}
|
public static readonly DependencyProperty ShelfTrashProperty =
|
DependencyProperty.Register("ShelfTrash", typeof(bool), typeof(ShelfLabware), new PropertyMetadata(false, OnShelfTrashChanged));
|
|
/// <summary>
|
/// 板位的数据库Id
|
/// </summary>
|
public string ShelfDBId
|
{
|
get { return (string)GetValue(ShelfDBIdProperty); }
|
set { SetValue(ShelfDBIdProperty, value); }
|
}
|
public static readonly DependencyProperty ShelfDBIdProperty =
|
DependencyProperty.Register("ShelfDBId", typeof(string), typeof(ShelfLabware), new PropertyMetadata(""));
|
|
public bool IsSelected
|
{
|
get { return (bool)GetValue(IsSelectedProperty); }
|
set { SetValue(IsSelectedProperty, value); }
|
}
|
|
// 依赖属性
|
public static readonly DependencyProperty IsSelectedProperty =
|
DependencyProperty.Register(
|
"IsSelected", typeof(bool), typeof(ShelfLabware),
|
new PropertyMetadata(false, OnIsSelectedChanged));
|
|
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
|
{
|
base.OnMouseLeftButtonUp(e);
|
// 处理左键抬起的逻辑
|
}
|
|
private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
{
|
ShelfLabware control = (ShelfLabware)d;
|
if (control != null)
|
{
|
// 当IsSelected属性改变时,这里可以添加更多的逻辑处理
|
if ((bool)e.NewValue)
|
{
|
// 设置控件被选中时的样式
|
//control.Background = Brushes.Blue;
|
RectangleGeometry rectangleGeometry = new RectangleGeometry(new Rect(0, 0, 70, 70), 0, 0);
|
GeometryDrawing MaskDrawing = new GeometryDrawing(Brushes.White, null, rectangleGeometry);
|
DrawingBrush drawingBrush = new DrawingBrush(MaskDrawing);
|
control.OpacityMask = drawingBrush;
|
drawingBrush.Stretch = Stretch.Fill;
|
control.OpacityMask.Opacity = 0.5d;
|
//Rectangle rtl = new Rectangle();
|
//rtl.StrokeDashArray = new DoubleCollection { 4,2};
|
//rtl.Stroke = Brushes.Gray;
|
//rtl.StrokeThickness = 1d;
|
//GeometryDrawing MaskDrawing = new GeometryDrawing(Brushes.White, null, rtl.Geo);
|
//DrawingBrush drawingBrush = new DrawingBrush(MaskDrawing);
|
//control.OpacityMask = drawingBrush;
|
//control.OpacityMask.Opacity = 0.5d;
|
}
|
else
|
{
|
// 设置控件未被选中时的样式
|
//control.Background = Brushes.Transparent;
|
control.OpacityMask.Opacity = 1d;
|
}
|
}
|
}
|
|
public static void OnLabelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
{
|
ShelfLabware control = (ShelfLabware)d;
|
if (control != null)
|
{
|
string label = e.NewValue as string;
|
|
control.SetLabel(label);
|
}
|
}
|
|
#region 改变为垃圾桶标志
|
public static void OnShelfTrashChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
{
|
ShelfLabware control = (ShelfLabware)d;
|
if (control != null)
|
{
|
bool isTrash = Convert.ToBoolean(e.NewValue);
|
if (isTrash)
|
{
|
if (borderTrash != null)
|
{
|
control.Children.Remove(borderTrash);
|
}
|
control.DrawTrash();
|
}
|
else
|
{
|
if (borderTrash != null)
|
{
|
control.Children.Remove(borderTrash);
|
}
|
}
|
}
|
}
|
#endregion
|
|
static Border borderTrash;
|
private void DrawTrash()
|
{
|
TextBlock tb = new TextBlock();
|
tb.Text = Properties.Resources.strTrash;
|
tb.FontSize = 10;
|
tb.FontWeight= FontWeights.Bold;
|
tb.Foreground = Brushes.Black;
|
tb.VerticalAlignment = VerticalAlignment.Center;
|
tb.HorizontalAlignment = HorizontalAlignment.Left;
|
|
borderTrash = new Border()
|
{
|
Name = "Trash",
|
Background = Brushes.DarkGray,
|
CornerRadius = new CornerRadius(5),
|
Child = tb,
|
};
|
//borderTrash.Loaded += BorderTrash_Loaded;
|
this.Children.Add(borderTrash);
|
Panel.SetZIndex(borderTrash, 4);
|
Grid.SetColumn(borderTrash, 0);
|
Grid.SetRow(borderTrash, 0);
|
}
|
|
private void BorderTrash_Loaded(object sender, RoutedEventArgs e)
|
{
|
Border tb = sender as Border;
|
if (tb != null)
|
{
|
tb.VerticalAlignment = VerticalAlignment.Center;
|
tb.HorizontalAlignment = HorizontalAlignment.Left;
|
}
|
}
|
|
public void SetLabel(string text)
|
{
|
if (borderLabel == null)
|
return;
|
TextBlock tb = Utilities.FindVisualChild<TextBlock>(borderLabel);
|
if (tb != null)
|
{
|
tb.Text = text;
|
}
|
if (string.IsNullOrEmpty(text))
|
borderLabel.Visibility = Visibility.Collapsed;
|
else
|
{
|
borderLabel.Visibility = Visibility.Visible;
|
((ToolTip)(tb.ToolTip)).Content = new TextBlock()
|
{
|
Text = ShelfName,
|
};
|
}
|
}
|
|
|
public ShelfLabware()
|
{
|
this.SnapsToDevicePixels = true;
|
InitializeComponent();
|
}
|
|
void InitializeComponent()
|
{
|
tooltip = new ToolTip();
|
tooltip.Placement = PlacementMode.Right;
|
tooltip.PlacementRectangle = new Rect(0, 0, 0, 0);
|
tooltip.HorizontalOffset = 30;
|
tooltip.VerticalOffset = -20;
|
|
tooltipLabware = new ToolTip();
|
tooltipLabware.Placement = PlacementMode.Right;
|
tooltipLabware.PlacementRectangle = new Rect(0, 0, 0, 0);
|
tooltipLabware.HorizontalOffset = 30;
|
tooltipLabware.VerticalOffset = -20;
|
this.SizeChanged += ControlLabware_SizeChanged;
|
}
|
|
private void ControlLabware_SizeChanged(object sender, SizeChangedEventArgs e)
|
{
|
if (this.ActualWidth == double.NaN || this.ActualWidth <= 0)
|
return;
|
|
this.Children.Clear();
|
|
DrawContent();
|
|
AddLabel();
|
Width = ShelfLength;
|
Height = ShelfWidth;
|
}
|
|
private void DrawContent()
|
{
|
Path path = new Path()
|
{
|
Stroke = Brushes.Gray,//FindResource("blueBrush") as SolidColorBrush,
|
StrokeThickness = 1,
|
Fill = Brushes.DarkGray//FindResource("lightBlueBrush") as SolidColorBrush,
|
};
|
string strData = GetPathData();
|
|
path.Data = Geometry.Parse(strData);
|
this.Children.Add(path);
|
}
|
|
private string GetPathData()
|
{
|
string ret = "";
|
double W = ShelfLength;
|
double H = ShelfWidth;
|
|
ret = string.Format("M0,0 L{0},0 L{1},{2} L0,{3}Z", W, W, H, H);
|
|
return ret;
|
}
|
|
|
|
|
private Border borderLabel;
|
private ToolTip tooltip;//鼠标悬停至标签提示文本
|
private ToolTip tooltipLabware;//鼠标悬停至耗材提示文本
|
private void AddLabel()
|
{
|
if(string.IsNullOrEmpty(ShelfName))
|
{
|
return;
|
}
|
|
tooltip.Content = new TextBlock()
|
{
|
Text = ShelfName,
|
};
|
|
|
TextBlock tb = new TextBlock();
|
tb.Text = ShelfName;
|
tb.Margin = new Thickness(2);
|
tb.Foreground = Brushes.White;
|
tb.TextWrapping = TextWrapping.Wrap;
|
tb.ToolTip = tooltip;
|
|
tooltipLabware.Content = new TextBlock()
|
{
|
Text = ShelfName,
|
};
|
this.ToolTip = tooltipLabware;
|
|
borderLabel = new Border()
|
{
|
Name = "borderLabel",
|
VerticalAlignment = VerticalAlignment.Top,
|
HorizontalAlignment = HorizontalAlignment.Left,
|
Background = new SolidColorBrush(Color.FromArgb(180, 34, 106, 255)),
|
Width = this.ShelfLength,
|
Height = 20,
|
Child = tb,
|
};
|
if (string.IsNullOrEmpty(ShelfName))
|
borderLabel.Visibility = Visibility.Collapsed;
|
else
|
borderLabel.Visibility = Visibility.Visible;
|
|
this.Children.Add(borderLabel);
|
Panel.SetZIndex(borderLabel, 5);
|
Grid.SetColumn(borderLabel, 0);
|
//Grid.SetColumnSpan(borderLabel, 2);
|
Grid.SetRow(borderLabel, 0);
|
//Grid.SetRowSpan(borderLabel, 2);
|
}
|
}
|
}
|