c#在失去焦点时格式化所有文本框
我创建了public void,将网格中的所有文本框格式化为货币 我的代码c#在失去焦点时格式化所有文本框,c#,wpf,xaml,C#,Wpf,Xaml,我创建了public void,将网格中的所有文本框格式化为货币 我的代码 public void FormatinTextBox() { foreach (Control ctrl in MainGrid.Children) { if (ctrl.GetType() == typeof(TextBox)) { double amount = 0.0d;
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\u加载的事件处理程序中,它的工作就完美了
但我想在每次离开textbox(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"/>
如果将
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}"/>
StringFormat='{}{0:c}'
在您的文本框上?这样,您就不需要任何后端代码来格式化它。您能描述一下如何以及在哪里放置它吗?@IdanSim我需要在Winform中执行类似的操作。你找到解决办法了吗?
<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;
}