private void Entry_TextChanged(object sender, TextChangedEventArgs e)
{
var entry = (Entry)sender;
var amt = e.NewTextValue.Replace("$", "");
if (decimal.TryParse(amt, out decimal num))
{
// Init our number
if (string.IsNullOrEmpty(e.OldTextValue))
{
num = num / 100;
}
// Shift decimal to right if added a decimal digit
else if (num.DecimalDigits() > 2 && !e.IsDeletion())
{
num = num * 10;
}
// Shift decimal to left if deleted a decimal digit
else if (num.DecimalDigits() < 2 && e.IsDeletion())
{
num = num / 10;
}
entry.Text = num.ToString("C");
}
else
{
entry.Text = e.OldTextValue;
}
}
}
public static class ExtensionMethods
{
public static int DecimalDigits(this decimal n)
{
return n.ToString(System.Globalization.CultureInfo.InvariantCulture)
.SkipWhile(c => c != '.')
.Skip(1)
.Count();
}
public static bool IsDeletion(this TextChangedEventArgs e)
{
return !string.IsNullOrEmpty(e.OldTextValue) && e.OldTextValue.Length > e.NewTextValue.Length;
}
}
2条答案
按热度按时间ykejflvf1#
这可以通过
TextChanged
事件来实现,下面的代码供大家参考:XAML:
后面的代码:
Reference link。
7d7tgy0s2#
我一直在考虑您的问题,并得到了一些您可能想要的东西。尝试将您的textBox与属性Text="{Binding InputValue}绑定。然后通过向您的主类键入
: INotifyPropertyChanged
来实现INotifyPropertyChanged接口。创建名为PropertyChanged的
public event PropertyChangedEventHandler
并添加所需内容:不要忘记设置属性,通过键入InputValue = 0.00MaddDataContext = this在下面**InitializeComponent();**也是。
像这样创建完整 prop 非常重要:
现在,您必须将textBox设置为ReadOnly并添加KeyDown事件:
对我很有效,你自己试试吧!
这是一个WPF的工作版本,但希望您能将其更改为Xamarin(移动的设备没有数字键盘等)。