Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#在失去焦点时格式化所有文本框_C#_Wpf_Xaml - Fatal编程技术网

c#在失去焦点时格式化所有文本框

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,将网格中的所有文本框格式化为货币

我的代码

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;
}