我的界面上有一个包含十进制值的文本框,我想在用户选择它时清除它。
但是,如果用户没有进行任何更改并选择另一个界面元素,我需要将文本恢复为以前清除的内容。
到目前为止,我有以下风格:
<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" />
但是,在这种情况下,该值会恢复为用户输入新值时的值。
有谁能告诉我实现这个目标的最佳途径?
谢谢,
答案 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"));
}
}