Silverlight中文本框的占位符行为
Silverlight中的Textbox是否有html输入标记中类似占位符的属性? 我想向用户提供一些提示,说明此文本框的输入内容。。 例如:Silverlight中文本框的占位符行为,silverlight,Silverlight,Silverlight中的Textbox是否有html输入标记中类似占位符的属性? 我想向用户提供一些提示,说明此文本框的输入内容。。 例如: 加载页面时,文本框中有一个字符串,如“search here…”,当用户单击文本框时,该字符串将消失,如果用户没有在该文本框中插入内容,则该字符串将再次出现。以下是如何使用行为: 我对Johan的水印行为类做了一点修改/增强,因为它不考虑文本字段因绑定而发生更改的时间。(即,假设您有: <TextBox Text="{Binding Account
加载页面时,文本框中有一个字符串,如“search here…”,当用户单击文本框时,该字符串将消失,如果用户没有在该文本框中插入内容,则该字符串将再次出现。以下是如何使用行为:
我对Johan的水印行为类做了一点修改/增强,因为它不考虑文本字段因绑定而发生更改的时间。(即,假设您有:
<TextBox Text="{Binding AccountNumber,Mode=TwoWay}">
<i:Interaction.Behaviors>
<Behaviors:Placeholder Text="Enter Account #..." Foreground="Gray" />
</i:Interaction.Behaviors>
</TextBox>
现在,如果在代码中的某个地方执行类似“AccountNumber=string.Empty”的操作,则该行为将更新水印:
public class Placeholder : Behavior<TextBox>
{
private bool _hasPlaceholder;
private Brush _textBoxForeground;
public String Text { get; set; }
public Brush Foreground { get; set; }
protected override void OnAttached()
{
_textBoxForeground = AssociatedObject.Foreground;
base.OnAttached();
if (Text != null)
SetPlaceholderText();
AssociatedObject.GotFocus += GotFocus;
AssociatedObject.LostFocus += LostFocus;
AssociatedObject.TextChanged += TextChanged;
}
private void TextChanged(object sender,
TextChangedEventArgs textChangedEventArgs)
{
if (string.IsNullOrWhiteSpace(AssociatedObject.Text) &&
FocusManager.GetFocusedElement() != AssociatedObject)
{
if (Text != null)
SetPlaceholderText();
}
}
private void LostFocus(object sender, RoutedEventArgs e)
{
if (string.IsNullOrWhiteSpace(AssociatedObject.Text))
{
if (Text != null)
SetPlaceholderText();
}
}
private void GotFocus(object sender, RoutedEventArgs e)
{
if (_hasPlaceholder)
RemovePlaceholderText();
}
private void RemovePlaceholderText()
{
AssociatedObject.Foreground = _textBoxForeground;
AssociatedObject.Text = "";
_hasPlaceholder = false;
}
private void SetPlaceholderText()
{
AssociatedObject.Foreground = Foreground;
AssociatedObject.Text = Text;
_hasPlaceholder = true;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.GotFocus -= GotFocus;
AssociatedObject.LostFocus -= LostFocus;
}
}
公共类占位符:行为
{
私人boolu has占位符;
私人画笔(前景);;
公共字符串文本{get;set;}
公共笔刷前景{get;set;}
受保护的覆盖无效附加()
{
_textBoxForeground=AssociatedObject.Foreground;
base.onatached();
如果(文本!=null)
设置占位符文本();
AssociatedObject.GotFocus+=GotFocus;
AssociatedObject.LostFocus+=LostFocus;
AssociatedObject.TextChanged+=TextChanged;
}
私有无效文本已更改(对象发送者,
textchangedventargs textchangedventargs)
{
if(string.IsNullOrWhiteSpace(AssociatedObject.Text)&&
FocusManager.GetFocusedElement()!=关联对象)
{
如果(文本!=null)
设置占位符文本();
}
}
私有void LostFocus(对象发送方,RoutedEventArgs e)
{
if(string.IsNullOrWhiteSpace(AssociatedObject.Text))
{
如果(文本!=null)
设置占位符文本();
}
}
private void GotFocus(对象发送方,RoutedEventArgs e)
{
如果(_haspocholder)
移除占位符文本();
}
私有void removePlaceholder文本()
{
AssociatedObject.Foreground=\u textBoxForeground;
AssociatedObject.Text=“”;
_haspholder=false;
}
私有void SetPlaceholderText()
{
AssociatedObject.前台=前台;
AssociatedObject.Text=文本;
_haspholder=true;
}
附加时受保护的覆盖无效()
{
base.OnDetaching();
AssociatedObject.GotFocus-=GotFocus;
AssociatedObject.LostFocus-=LostFocus;
}
}
html输入中的占位符标记是什么?不太清楚您想要实现什么非常简单…非常感谢您他们有一个问题-当我将其连接到文本框并运行程序时,它不会显示水印,除非我单击文本框并再次失去焦点。我不明白为什么会发生。请您帮助这让我明白了…谢谢…谢谢,这是绑定时更好的解决方案。请注意,此实现不幸有点缺陷。它会将说明…
文本绑定到数据绑定值中,至少我是这样做的(注意:我正在使用一种特殊行为来延迟绑定,这可能会影响它-YMMV)。它还将使用不正确的占位符颜色呈现预填充文本。我正在寻找另一种解决方案,在另一个文本框的顶部显示一个文本块,当文本框接收到焦点时,该文本块将隐藏。
public class Placeholder : Behavior<TextBox>
{
private bool _hasPlaceholder;
private Brush _textBoxForeground;
public String Text { get; set; }
public Brush Foreground { get; set; }
protected override void OnAttached()
{
_textBoxForeground = AssociatedObject.Foreground;
base.OnAttached();
if (Text != null)
SetPlaceholderText();
AssociatedObject.GotFocus += GotFocus;
AssociatedObject.LostFocus += LostFocus;
AssociatedObject.TextChanged += TextChanged;
}
private void TextChanged(object sender,
TextChangedEventArgs textChangedEventArgs)
{
if (string.IsNullOrWhiteSpace(AssociatedObject.Text) &&
FocusManager.GetFocusedElement() != AssociatedObject)
{
if (Text != null)
SetPlaceholderText();
}
}
private void LostFocus(object sender, RoutedEventArgs e)
{
if (string.IsNullOrWhiteSpace(AssociatedObject.Text))
{
if (Text != null)
SetPlaceholderText();
}
}
private void GotFocus(object sender, RoutedEventArgs e)
{
if (_hasPlaceholder)
RemovePlaceholderText();
}
private void RemovePlaceholderText()
{
AssociatedObject.Foreground = _textBoxForeground;
AssociatedObject.Text = "";
_hasPlaceholder = false;
}
private void SetPlaceholderText()
{
AssociatedObject.Foreground = Foreground;
AssociatedObject.Text = Text;
_hasPlaceholder = true;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.GotFocus -= GotFocus;
AssociatedObject.LostFocus -= LostFocus;
}
}