如何在wpf应用程序中添加公制和英制
How to add metric and imperial system in wpf application
我有一个默认设置,它在设置中将 IsMetricMeasurements 声明为布尔值作为默认设置 instance.But 当我将它与 CoerceProperty 一起使用时检查最大值和最小值并使其成为度量标准,即使用户键入和select 英寸。它搞乱了整个转换系统。我应该把我的转换逻辑放在哪里我想制作 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)
{
}
}
范围助手class
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;
注意:我有一个切换按钮,只需 select 即可将文本框转换为英寸或毫米。如果我 select 毫米它工作正常,但是当我更改为英寸时一切都搞砸了。有没有地方可以添加转换逻辑(1 inch = 25.4mm)。
我使用 Converter class 并绑定了它,但我仍然遇到一些问题。特别感谢@Ed Plunkett @EdPlunkett,他以正确的方式指导了我。
我有一个默认设置,它在设置中将 IsMetricMeasurements 声明为布尔值作为默认设置 instance.But 当我将它与 CoerceProperty 一起使用时检查最大值和最小值并使其成为度量标准,即使用户键入和select 英寸。它搞乱了整个转换系统。我应该把我的转换逻辑放在哪里我想制作 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)
{
}
}
范围助手class
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;
注意:我有一个切换按钮,只需 select 即可将文本框转换为英寸或毫米。如果我 select 毫米它工作正常,但是当我更改为英寸时一切都搞砸了。有没有地方可以添加转换逻辑(1 inch = 25.4mm)。
我使用 Converter class 并绑定了它,但我仍然遇到一些问题。特别感谢@Ed Plunkett @EdPlunkett,他以正确的方式指导了我。