Silverlight4-Behavior-NumericUpDown自动小数位数行为

NumericUpDown应该是平常用的比较多的控件了,省去了用TextBox时验证是否是数字等一系列麻烦的事。

其允许设置一个小数位数以格式化显示出来的数据,虽然最终获取的Value值和这个小数位没关系,比如在控件中输入3.1415926,如果设了小数位数是2,那么显示的会是3.14,而实际获取的Value还是等于3.1415926。

可惜小数位数只能设置为0-15之间的一个准确的整数,而我们的用户也请不一定知道其中的奥妙,他们只想输入多少显示多少。

那就添加个行为,用于在用户输入值的时候自动改变设定的小数位数。

代码如下:

public class AutoDecimalPlacesBehavior : Behavior < NumericUpDown >
{
public AutoDecimalPlacesBehavior()
{
}

protected override void OnAttached()
{
base .OnAttached();

this .AssociatedObject.ValueChanging += new RoutedPropertyChangingEventHandler < double > (AssociatedObject_ValueChanging);
this .AssociatedObject.ValueChanged += new RoutedPropertyChangedEventHandler < double > (AssociatedObject_ValueChanged);
}

protected override void OnDetaching()
{
base .OnDetaching();

this .AssociatedObject.ValueChanging -= new RoutedPropertyChangingEventHandler < double > (AssociatedObject_ValueChanging);
this .AssociatedObject.ValueChanged -= new RoutedPropertyChangedEventHandler < double > (AssociatedObject_ValueChanged);
}

void AssociatedObject_ValueChanging( object sender, RoutedPropertyChangingEventArgs < double > e)
{
this .SetDecimalPlaces(e.NewValue);
}

void AssociatedObject_ValueChanged( object sender, RoutedPropertyChangedEventArgs < double > e)
{
this .SetDecimalPlaces(e.NewValue);
}

private void SetDecimalPlaces( double value)
{
var values
= value.ToString().Split( ' . ' );
this .AssociatedObject.DecimalPlaces = values.Length == 2 ? Math.Min(values[ 1 ].Length, 15 ) : 0 ;
}
}

代码还是非常简单,注册了ValueChanging和ValueChanged两个事件,为了确保万无一失。

当控件内的值改变时我们就能获取当前的新值,然后对新值进行一点点小处理就好了,当然还是要确保0<=DecimalPlaces<=15。

转载于:https://www.cnblogs.com/HalfwayMonk/archive/2011/06/23/2088495.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值