如何在wpf应用程序中添加公制和英制系统

问题描述:

我有一个默认设置,它将IsMetricMeasurements设置为默认实例中的bool设置。但是,当我使用它与CoerceProperty来检查最大值和最小值并使其公制,即使用户键入并选择英寸。这是整个转换系统的混乱。哪里应该把我的转换逻辑,我想使毫米(公制)。即使如果我检查我的xaml(IO文件)它保存正确的值,但是当我在应用程序本身读取保存的文件时,它会给出错误的值。如何在wpf应用程序中添加公制和英制系统

Dimensiondata.cs

public class DimensionData : BaseDateEntity, ICloneable, IDataErrorInfo ,IValueConverter 

{ 

    public static readonly DependencyProperty DiameterProperty = DependencyProperty.Register("Diameter", typeof(float), typeof(DimensionData), 
     new FrameworkPropertyMetadata(Consts.DimensionDataDiameter, OnDiameterPropertyChanged, OnDiameterCoerceProperty)); 


    public float Diameter 
    { 
     get { return (float)GetValue(DiameterProperty); } 
     set { SetValue(DiameterProperty, value); } 
    } 


static object OnDiameterCoerceProperty(DependencyObject sender, object value) 
    {    
     if (Properties.Settings.Default.IsMetricMeasurements) 
     {  
      return RangeHelper.RangeLength(140F, 900F, (float)value); 
      } 
     else 
     { 
      value = (float)value/25.4F; 
      return RangeHelper.RangeLength(5.511F, 35.43F, (float)value);    
     } 

static void OnDiameterPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) 

    { 
     DimensionData data = dependencyObject as DimensionData; 

     if (null != data) 
     { 

     } 
    } 

RangeHelper类

public static float RangeLength(float min, float max, float value) 
    { 
     float r = value; 

     if (r > max) 
      r = max; 

     if (r < min) 
      r = min; 
     return r; 

注:我有一个切换按钮,通过刚刚选择它使文本框为英寸或毫米。如果我选择mm,它可以正常工作,但是当我更改为英寸时,一切都会搞砸。是否有添加转换逻辑的地方(1英寸= 25.4毫米)。

我得到它使用Converter类并绑定它,但仍然有几个问题。特别感谢@Ed Plunkett @EdPlunkett,他以正确的方式引导我。

+0

特别感谢t @EdPlunkett,他以正确的方式指引着我。 – user6850427