Sic08/FrameworkLocal/UICore/DeviceControl/AITHeaterInputDialogBox.xam...

406 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 System.Globalization;
using Aitex.Core.RT.Log;
namespace Aitex.Core.UI.DeviceControl
{
public class DoubleConverter : IValueConverter
{
public DoubleConverter()
{
}
// Summary:
// Converts a value.
//
// Parameters:
// value:
// The value produced by the binding source.
//
// targetType:
// The type of the binding target property.
//
// parameter:
// The converter parameter to use.
//
// culture:
// The culture to use in the converter.
//
// Returns:
// A converted value. If the method returns null, the valid null value is used.
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value.ToString();
}
//
// Summary:
// Converts a value.
//
// Parameters:
// value:
// The value that is produced by the binding target.
//
// targetType:
// The type to convert to.
//
// parameter:
// The converter parameter to use.
//
// culture:
// The culture to use in the converter.
//
// Returns:
// A converted value. If the method returns null, the valid null value is used.
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string input = (string)value;
double result = 0;
if (double.TryParse(input, out result))
{
return result;
}
return DependencyProperty.UnsetValue;
}
}
public class InputDialogValidationRule : ValidationRule
{
double minInput;
double maxInput;
public double MinInput
{
get
{
return this.minInput;
}
set
{
this.minInput = value;
}
}
public double MaxInput
{
get
{
return this.maxInput;
}
set
{
this.maxInput = value;
}
}
public InputDialogValidationRule()
{
}
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
double result;
// Is a number?
if (!double.TryParse((string)value, out result))
{
string msg = string.Format("{0}’不是一个数.", value);
return new ValidationResult(false, msg);
}
// Is in range?
if ((result < this.minInput) || (result > this.maxInput))
{
string msg = string.Format("输入值必须在‘{0}’与‘{1}’之间.", this.minInput, this.maxInput);
return new ValidationResult(false, msg);
}
// Number is valid
return new ValidationResult(true, null);
}
}
/// <summary>
/// Interaction logic for InputDialogBox.xaml
/// </summary>
public partial class AITHeaterInputDialogBox : Window
{
public static readonly DependencyProperty DeviceNameProperty = DependencyProperty.Register(
"DeviceName", typeof(string), typeof(AITHeaterInputDialogBox),
new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty DeviceIdProperty = DependencyProperty.Register(
"DeviceId", typeof(string), typeof(AITHeaterInputDialogBox),
new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty MaxValueProperty = DependencyProperty.Register(
"MaxValue", typeof(double), typeof(AITHeaterInputDialogBox),
new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty DefaultValueProperty = DependencyProperty.Register(
"DefaultValue", typeof(double), typeof(AITHeaterInputDialogBox),
new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty RealValueProperty = DependencyProperty.Register(
"RealValue", typeof(string), typeof(AITHeaterInputDialogBox),
new FrameworkPropertyMetadata("0.0", FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty UnitProperty = DependencyProperty.Register(
"Unit", typeof(string), typeof(AITHeaterInputDialogBox),
new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty SetPointProperty = DependencyProperty.Register(
"SetPoint", typeof(double), typeof(AITHeaterInputDialogBox),
new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty IsHeaterOnProperty = DependencyProperty.Register(
"IsHeaterOn", typeof(bool), typeof(AITHeaterInputDialogBox),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
/// <summary>
/// 是否百分比显示
/// </summary>
public bool IsPercent
{
get;
set;
}
public string DeviceName
{
get
{
return (string)this.GetValue(DeviceNameProperty);
}
set
{
if (!string.IsNullOrEmpty(value) && !value.StartsWith("_"))
value = "_" + value;
this.SetValue(DeviceNameProperty, value);
}
}
public string DeviceId
{
get
{
return (string)this.GetValue(DeviceIdProperty);
}
set
{
this.SetValue(DeviceIdProperty, value);
}
}
public double MaxValue
{
get
{
return (double)this.GetValue(MaxValueProperty);
}
set
{
this.SetValue(MaxValueProperty, value);
// validationRule.MaxInput = value;
}
}
public double DefaultValue
{
get
{
return (double)this.GetValue(DefaultValueProperty);
}
set
{
this.SetValue(DefaultValueProperty, value);
}
}
public string RealValue
{
get
{
return (string)this.GetValue(RealValueProperty);
}
set
{
this.SetValue(RealValueProperty, value);
}
}
public string Unit
{
get
{
return (string)this.GetValue(UnitProperty);
}
set
{
this.SetValue(UnitProperty, value);
}
}
public double SetPoint
{
get
{
return (double)this.GetValue(SetPointProperty);
}
set
{
this.SetValue(SetPointProperty, value);
}
}
public bool IsHeaterOn
{
get
{
return (bool)this.GetValue(IsHeaterOnProperty);
}
set
{
this.SetValue(IsHeaterOnProperty, value);
btnHeaterOff.IsEnabled = value;
btnHeaterOn.IsEnabled = !value;
}
}
public bool EnableTemperatureSetting
{
get;
set;
}
public bool EnablePowerControl
{
get;
set;
}
public Action<bool> SetHeaterPowerOnOffCommandDelegate;
public Action<double> SetHeaterValueCommandDelegate;
public AITHeaterInputDialogBox()
{
InitializeComponent();
DataContext = this;
WindowStartupLocation = WindowStartupLocation.CenterOwner;
this.Loaded += AITHeaterInputDialogBox_Loaded;
}
private void AITHeaterInputDialogBox_Loaded(object sender, RoutedEventArgs e)
{
btnHeaterOn.Visibility = EnablePowerControl ? Visibility.Visible : Visibility.Hidden;
btnHeaterOff.Visibility = EnablePowerControl ? Visibility.Visible : Visibility.Hidden;
btnSet.IsEnabled = EnableTemperatureSetting;
inputBox.IsEnabled = EnableTemperatureSetting;
}
public void FocasAll()
{
inputBox.Text = Math.Round(SetPoint, 2).ToString();
inputBox.Focus();
inputBox.SelectAll();
}
/// <summary>
/// Vilidate input range
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void InputTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
double input;
if (!double.TryParse(inputBox.Text, out input))
btnSet.IsEnabled = false;
else if (input < 0 || input > MaxValue)
btnSet.IsEnabled = false;
else
btnSet.IsEnabled = true;
inputBox.Foreground = btnSet.IsEnabled ?
System.Windows.Media.Brushes.Black : System.Windows.Media.Brushes.Red;
}
private void ButtonSet_Click(object sender, RoutedEventArgs e)
{
try
{
SetHeaterValueCommandDelegate(Convert.ToDouble(inputBox.Text));
//Close();
}
catch (Exception ex)
{
LOG.Error(ex.Message);
}
}
private void OnEnterKeyIsHit(object sender, KeyEventArgs e)
{
try
{
if (!btnSet.IsEnabled)
return;
if (e.Key == Key.Return)
{
ButtonSet_Click(null, null);
}
}
catch (Exception ex)
{
LOG.Error(ex.Message);
}
}
private void ButtonCancel_Click(object sender, RoutedEventArgs e)
{
Close();
}
private void ButtonHeaterOn_Click(object sender, RoutedEventArgs e)
{
try
{
if (SetHeaterPowerOnOffCommandDelegate != null)
{
SetHeaterPowerOnOffCommandDelegate(true);
}
}
catch (Exception ex)
{
LOG.Error(ex.Message);
}
}
private void ButtonHeaterOff_Click(object sender, RoutedEventArgs e)
{
try
{
if (SetHeaterPowerOnOffCommandDelegate != null)
{
SetHeaterPowerOnOffCommandDelegate(false);
}
}
catch (Exception ex)
{
LOG.Error(ex.Message);
}
}
}
}