【问题标题】:WPF Textbox remove currency formatting on focusWPF 文本框删除焦点上的货币格式
【发布时间】:2013-05-15 10:02:35
【问题描述】:

是否可以删除焦点上的 WPF 文本框上的货币格式?该应用程序遵循 MVVM。

<TextBox HorizontalAlignment="Left"
         Height="23"
         Margin="156,264,0,0"
         TextWrapping="Wrap"
         HorizontalContentAlignment="Right"
         Text="{Binding Amount, StringFormat=c, ValidatesOnNotifyDataErrors=True}"
         VerticalAlignment="Top"
         Width="100" />

当文本框没有焦点时,我需要格式化。但只有当它具有焦点时才需要将其删除,以便用户轻松编辑。去掉 $ 的原因是当你 tab 时,焦点在 $ 之前。这意味着用户必须再次单击或使用箭头键移动到数字。

当用户点击上面的文本框时,货币符号应该被移除。感谢您的帮助。

【问题讨论】:

    标签: wpf


    【解决方案1】:

    删除StringFormat=c

    <TextBox HorizontalAlignment="Left" Height="23" Margin="156,264,0,0" TextWrapping="Wrap" HorizontalContentAlignment="Right"
                Text="{Binding Amount, ValidatesOnNotifyDataErrors=True}" VerticalAlignment="Top" Width="100" />
    

    如果这不能解决问题,则在您的视图模型中对您的 Amount 属性进行了幕后操作,该属性正在添加格式。由于该代码不是问题的一部分,因此除非您编辑帖子并包含相关代码,否则我无法为您提供帮助。

    【讨论】:

    • Spike,我需要文本框中的格式。但只有在获得焦点时才需要移除。
    • 为什么不把货币符号单独放在文本框前面呢?这样你就不必担心像这样在焦点上来回切换字符串。 -- 如果您不只是处理 $,您可以从这篇文章中的信息中获取当前本地化的货币符号。 stackoverflow.com/questions/2763128/…
    • "为什么不把货币符号单独放在文本框之前?" 或者如果语言环境发生变化并且货币单位变为欧元之后。
    【解决方案2】:

    如何使用属性设置字符串格式而不是在 XAML 中指定字符串格式,在加载 VM 时将属性值设置为 c 并在 TextBox GotFocus 事件处理程序中将其更改为空字符串?

    XAML:

    StringFormat="{Binding MyStringFormat}"
    

    视图模型:

    private string myStringFormat;
    public string MyStringFormat
    {
       get { return myStringFormat; }
       set
       {
           myStringFormat= value;
           NotifyPropertyChanged(m => m.MyStringFormat);
       }
    }
    

    查看:

    void MyTextBox_GotFocus(object sender, EventArgs e)
    {
        myvm = DataContext as MyViewModel;
        if (myvm == null) return;
        myvm.MyStringFormat = string.Empty;
    }
    
    void MyTextBox_LostFocus(object sender, EventArgs e)
    {
        myvm = DataContext as MyViewModel;
        if (myvm == null) return;
        myvm.MyStringFormat = "c";
    }
    

    【讨论】:

    【解决方案3】:

    您可以编写将在TextBox 获得焦点时执行的触发器,此时您可以更改StringFormat

    TextBox风格:

    <TextBox TextWrapping="Wrap"
             Height="23" Width="200" 
             HorizontalAlignment="Left" HorizontalContentAlignment="Right" VerticalAlignment="Top">
        <TextBox.Style>
            <Style TargetType="TextBox">                   
                <Setter Property="Text" Value="{Binding Amount, StringFormat=C, UpdateSourceTrigger=LostFocus}" />
                <Style.Triggers>
                    <Trigger Property="Control.IsFocused" Value="True">
                        <Setter Property="Text" Value="{Binding Amount, StringFormat=F2, UpdateSourceTrigger=LostFocus}" />                            
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多