using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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;
using Aitex.Core.Equipment.SusceptorDefine;
namespace Aitex.Core.UI.Control
{
///
/// Interaction logic for SusceptorNotchControl.xaml
///
public partial class SusceptorNotchControl : UserControl
{
public Action MouseDownCallback;
public int Index { get; set; }
public bool IsInputValid { private set; get; }
public static readonly DependencyProperty DisplayIndexProperty = DependencyProperty.Register(
"DisplayIndex", typeof(int), typeof(SusceptorNotchControl),
new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsRender));
public int DisplayIndex
{
get
{
return (int)GetValue(DisplayIndexProperty);
}
set
{
SetValue(DisplayIndexProperty, value);
}
}
public static readonly DependencyProperty CurrentSusceptorStatusProperty = DependencyProperty.Register(
"CurrentSusceptorStatus", typeof(SusceptorStatus), typeof(SusceptorNotchControl),
new FrameworkPropertyMetadata(SusceptorStatus.Empty, FrameworkPropertyMetadataOptions.AffectsRender));
public SusceptorStatus CurrentSusceptorStatus
{
get
{
return (SusceptorStatus)GetValue(CurrentSusceptorStatusProperty);
}
set
{
SetValue(CurrentSusceptorStatusProperty, value);
}
}
public static readonly DependencyProperty CurrentWaferStatusProperty = DependencyProperty.Register(
"CurrentWaferStatus", typeof(WaferStatus), typeof(SusceptorNotchControl),
new FrameworkPropertyMetadata(WaferStatus.Normal, FrameworkPropertyMetadataOptions.AffectsRender));
public WaferStatus CurrentWaferStatus
{
get
{
return (WaferStatus)GetValue(CurrentWaferStatusProperty);
}
set
{
SetValue(CurrentWaferStatusProperty, value);
}
}
public static readonly DependencyProperty CurrentWaferTypeProperty = DependencyProperty.Register(
"CurrentWaferType", typeof(WaferType), typeof(SusceptorNotchControl),
new FrameworkPropertyMetadata(WaferType.Empty, FrameworkPropertyMetadataOptions.AffectsRender));
public WaferType CurrentWaferType
{
get
{
return (WaferType)GetValue(CurrentWaferTypeProperty);
}
set
{
SetValue(CurrentWaferTypeProperty, value);
}
}
//如果Ture,鼠标在notch上面移动,显示颜色变化
public static readonly DependencyProperty IsActiveProperty = DependencyProperty.Register(
"IsActive", typeof(Boolean), typeof(SusceptorNotchControl),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
public bool IsActive
{
get
{
return (bool)GetValue(IsActiveProperty);
}
set
{
SetValue(IsActiveProperty, value);
}
}
//如果Ture,nnotch可以编辑
public static readonly DependencyProperty IsReadonlyProperty = DependencyProperty.Register(
"IsReadonly", typeof(Boolean), typeof(SusceptorNotchControl),
new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.AffectsRender));
public bool IsReadonly
{
get
{
return (bool)GetValue(IsReadonlyProperty);
}
set
{
SetValue(IsReadonlyProperty, value);
}
}
public SusceptorNotchControl()
{
InitializeComponent();
}
public void Update()
{
textBoxWafer.Text = DisplayIndex.ToString();
textBoxWafer.Background = SusceptorBrush.GetNotchBackgroundBrush(CurrentSusceptorStatus, CurrentWaferType, CurrentWaferStatus);
}
protected override void OnRender(DrawingContext drawingContext)
{
Update();
}
private void Label_MouseEnter(object sender, MouseEventArgs e)
{
if (!IsActive) return;
if (CurrentWaferType == WaferType.Empty)
textBoxWafer.Background = SusceptorBrush.OnEnteringBrush;
}
private void Label_MouseLeave(object sender, MouseEventArgs e)
{
if (!IsActive) return;
if (CurrentWaferType == WaferType.Empty)
textBoxWafer.Background = SusceptorBrush.EmptyBrush;
}
private void Label_MouseDown(object sender, MouseButtonEventArgs e)
{
if (IsActive && MouseDownCallback != null)
{
MouseDownCallback.Invoke(this, IsReadonly &&( Keyboard.IsKeyDown(Key.LeftShift)||Keyboard.IsKeyDown(Key.RightShift)));
}
e.Handled = false;
}
private void textBoxWafer_TextChanged(object sender, TextChangedEventArgs e)
{
int result;
IsInputValid = !string.IsNullOrWhiteSpace(textBoxWafer.Text) && int.TryParse(textBoxWafer.Text, out result);
Rectangle r = FindFirstVisualChild(textBoxWafer, "rectangle1");
if (r != null)
r.Stroke = new SolidColorBrush(IsInputValid ? Colors.Black : Colors.Red);
}
T FindFirstVisualChild(DependencyObject obj, string childName) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child is T && child.GetValue(NameProperty).ToString() == childName)
{
return (T)child;
}
else
{
T childOfChild = FindFirstVisualChild(child, childName);
if (childOfChild != null)
{
return childOfChild;
}
}
}
return null;
}
}
}