WPF隐藏焦点上的TextBox文本

时间:2012-07-03 15:20:54

标签: c# wpf

我的界面上有一个包含十进制值的文本框,我想在用户选择它时清除它。

但是,如果用户没有进行任何更改并选择另一个界面元素,我需要将文本恢复为以前清除的内容。

到目前为止,我有以下风格:

<Style x:Key="CustomTextBoxStyle" TargetType="{x:Type TextBox}">
     <Setter Property="Text" Value="{Binding RelativeSource={RelativeSource Self}, Path=Tag}"/>
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Text" Value="{x:Null}" />
            </Trigger>
        </Style.Triggers>
    </Style>

然后使用以下样式:

<TextBox Style="{DynamicResource CustomTextBoxStyle}" 
                     Tag="{Binding myDecimalValue, StringFormat=#.###}" 
                     TabIndex="1" />

但是,在这种情况下,该值会恢复为用户输入新值时的值。

有谁能告诉我实现这个目标的最佳途径?

谢谢,

3 个答案:

答案 0 :(得分:0)

此处的解决方案不是隐藏文本,而是将其存储在变量中以供日后使用。在C#中,代码类似于:

string _originalValue;

public OnFocus(){
    _originalValue = TextBox.Text;
    TextBox.Text = "";
}
public LostFocus(){
    if(TextBox.Text == "")
        TextBox.Text = _originalValue;
}

答案 1 :(得分:0)

您可以将forground颜色设置为透明,以隐藏文本(如果合适)。

如果您确实要删除文本,则应该执行Ryan Amies在viewmodel上建议的内容,您应该可以通过datacontext获取该内容。

答案 2 :(得分:0)

感谢您的帮助,但我能够通过使用下面描述的AttachedProperty来实现我所寻求的并遵守MVVM原则:

https://stackoverflow.com/a/7972361/1466960

这允许我将IsFocused属性绑定到视图模型中的值,并以与Ryan Amies描述的方式类似的方式继续。

查看型号:

bool isFocused = false;
double original;

public bool IsFocused
{
    get
    {
        return isFocused;
    }
    set
    {
        isFocused = value;

        if (isFocused)
        {
            original = current;
            current = "";
        }
        else
        {
            if (HundredPercentLine == "")
                current = original;
        }

        OnPropertyChanged(new PropertyChangedEventArgs("IsFocused"));
    }
}