我创建了公共空白,将网格中的所有文本框格式化为货币
我的代码
public void FormatinTextBox()
{
foreach (Control ctrl in MainGrid.Children)
{
if (ctrl.GetType() == typeof(TextBox))
{
double amount = 0.0d;
if (Double.TryParse(((TextBox)ctrl).Text, NumberStyles.Currency, null, out amount))
((TextBox)ctrl).Text = amount.ToString("C");
else
((TextBox)ctrl).Text = String.Empty;
}
}
}
如果我把这段代码放到MainGrid_Loaded的事件处理程序中,那就完美了。
但我希望每次离开文本框(lostFocus)时运行此代码。
我更喜欢在每个文本框上使用xaml激活此代码,我不知道是否可以这样做。这是我在xaml中的代码,用于我的一个文本框
<TextBox x:Name="Nose" HorizontalAlignment="Left" Height="24" Margin="710,209,0,0" TextWrapping="Wrap"
VerticalAlignment="Top" Width="110" BorderThickness="0,0,0,1" Text="100" LostFocus="Nose_LostFocus"/>
如果不可能,我如何在后面的代码上运行此代码
private void Nose_LostFocus(object sender, RoutedEventArgs e)
{
}
答案 0 :(得分:0)
如果将Text
属性绑定到源属性,则可以将StringFormat
应用于绑定:
public partial class MainWindow : Window
{
public MainWindow ()
{
InitializeComponent();
Nose.DataContext = this;
}
public decimal? Text { get; set; }
}
<强> XAML:强>
<TextBox x:Name="Nose" Text="{Binding Text, StringFormat=C}"/>
但是如果你不是一些自定义逻辑,你可以使用事件处理程序。您可以像以前一样实现它:
private void Nose_LostFocus(object sender, RoutedEventArgs e)
{
TextBox textBox = (TextBox)sender;
double amount;
textBox.Text = (double.TryParse(textBox.Text, out amount)) ? amount.ToString("C") : string.Empty;
}