创建一个文本框,文本始终显示为MINUTES

时间:2011-08-26 02:23:11

标签: c# wpf

我想要一个文本框,其中的内容是:

"3 minutes"

但当这个人在上面写字时,消失了几分钟,当失去了焦点时,再次出现单词分钟。

我在WPF中开发

3 个答案:

答案 0 :(得分:1)

非常剪裁和干燥的方法,让您开始做出更好的事情。如果没有任何方法可以从文本框中失去焦点(即它是窗口上唯一的控件),这根本不起作用。

private void textBox1_GotFocus(object sender, RoutedEventArgs e) {
    textBox1.Text = textBox1.Text.Replace(" minutes", "");
}

private void textBox1_LostFocus(object sender, RoutedEventArgs e) {
    textBox1.Text = textBox1.Text + " minutes";
}

答案 1 :(得分:0)

我会在javascript中执行此操作,例如this

我认为没有服务器端的“Focus”事件,而且我一直认为处理模糊(TextChanged)事件服务器端是坏事。当光标离开某个字段时,我不希望发布表单。

答案 2 :(得分:0)

我假设您要从文本框unit中移除OnFocus并在焦点丢失时附加它,

private void textBox1_LostFocus(object sender, RoutedEventArgs e)
{
    TextBox textbox;
    if ((textbox = sender as TextBox) != null)
    {
        // Append the unit if any, otherwise the text remains unchanged
        if(textbox.Tag != null)
        {
            var unit = textbox.Tag.ToString();
            if(string.IsNullOrEmpty(unit) == false)
            {
                textbox.Text = string.Format(CultureInfo.CurrentCulture, "{0} {1}", textbox.Text, unit);
            }
        }
    }
}

private void textBox1_GotFocus(object sender, RoutedEventArgs e)
{
    TextBox textbox;
    if((textbox = sender as TextBox) != null)
    {
        // Note that this assumes values of the type '[value] [units]' (single space delimiter)
        var valueAndUnit = textbox.Text.Split(' ');

        // If there is a unit then store it to the Tag property
        if(valueAndUnit.Length > 1)
        {
            textbox.Tag = valueAndUnit[1];
        }

        textbox.Text = valueAndUnit[0];
    }
}

另外,在用户输入值时,请查看textbox ValidationTextChanged event以查看文本(例如,当值为整数时,仅允许输入数字)。