如何在WPF中“格式化”文本框值

时间:2011-11-09 18:08:26

标签: wpf textbox formatting

是否有一种简单的方法可以让文本框在文本框中显示格式并在编辑时将其删除?

示例:我想要一个货币价值。当用户输入值5.5时,它显示$ 5.00。当用户重新点击文本框时,它应该切换回5.5。

谢谢你。

编辑:我想要做的是相当于转换器,除了文本框没有绑定设置。

1 个答案:

答案 0 :(得分:1)

这有几个解决方案。也许最简单的方法是实现自定义行为(你需要引用System.Windows.Interactivity.dll)&挂钩到TextBox公开的一些事件,如GotFocus和LostFocus。这是我在完成聚焦时选择所有TextBox文本的示例:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interactivity;

namespace TextBoxUtility
{
    public class TextBoxSelectAllOnFocusBehavior : Behavior<TextBox>
    {
        protected override void OnAttached()
        {
            base.OnAttached();

            this.AssociatedObject.PreviewMouseLeftButtonDown += OnPreviewMouseLeftButtonDown;
            this.AssociatedObject.GotKeyboardFocus += OnSelectAll;
            this.AssociatedObject.MouseDoubleClick += OnSelectAll;
        }

        protected override void OnDetaching()
        {
            this.AssociatedObject.PreviewMouseLeftButtonDown -= OnPreviewMouseLeftButtonDown;
            this.AssociatedObject.GotKeyboardFocus -= OnSelectAll;
            this.AssociatedObject.MouseDoubleClick -= OnSelectAll;
            base.OnDetaching();
        }

        private static void OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var textbox = sender as TextBox;

            if (textbox != null && !textbox.IsKeyboardFocusWithin)
            {
                textbox.Focus();
                e.Handled = true;
            }
        }

        private static void OnSelectAll(object sender, RoutedEventArgs e)
        {
            var textbox = sender as TextBox;
            if (textbox != null)
            {
                textbox.SelectAll();
            }
        }

编辑:忘记显示如何将行为挂钩到TextBox。 要附加行为,在XAML中,您需要向Behavior的命名空间添加命名空间引用,然后将其作为TextBox标记的子项附加,如下所示:

<TextBox Text="{Binding ....}">
    <i:Interaction.Behaviors>
        <utility:TextBoxSelectAllOnFocusBehavior />
    </i:Interaction.Behaviors>
</TextBox>

您可以执行类似的操作,但是您可以使用它来连接与LostFocus相关的事件并调整TextBox的Text属性的内容。