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

时间:2017-04-06 22:23:02

标签: wpf dependency-properties

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

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毫米)。

1 个答案:

答案 0 :(得分:0)

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