我需要一个Silverlight文本框中的功能,类似于stalkoverflow中的Ask Question“Title”文本框中的simillar功能。当文本框中没有文本时,它应显示“搜索”。当用户单击文本框时,文本框文本应为空,如果文本为空,则文本框中的文本框失去焦点,然后显示“搜索”。我编写了以下代码,但是有没有处理所有可能条件的代码?
private void txtAvailable_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
txtAvailable.Text = "";
}
private void txtAvailable_LostFocus(object sender, RoutedEventArgs e)
{
if (txtAvailable.Text.Trim() == "")
txtAvailable.Text = "Search";
}
答案 0 :(得分:1)
你可以使用Textbox GotFocus和LostFocus事件 - 它们应该足够通用,以掩盖你所有的潜力..
当您想要搜索每次击键时都会有特殊性 - 您必须启用和禁用对这些事件的搜索。
private bool IsBusy
{
get;
set;
}
private bool CanSearch
{
get;
set;
}
public Constructor()
{
InitializeComponent();
this.IsBusy = false;
txtSearch.GotFocus += new RoutedEventHandler( txtSearch_GotFocus );
txtSearch.LostFocus += new RoutedEventHandler( txtSearch_LostFocus );
txtSearch.KeyUp += new System.Windows.Input.KeyEventHandler( txtSearch_KeyUp );
txtSearch.Text = "Search »";
}
private void txtSearch_LostFocus( object sender, RoutedEventArgs e )
{
if( string.IsNullOrEmpty( txtSearch.Text ) )
{
CanSearch = false;
txtSearch.Text = "Search »";
}
}
private void txtSearch_GotFocus( object sender, RoutedEventArgs e )
{
txtSearch.Text = string.Empty;
CanSearch = true;
}
private void OnFilterCommand()
{
try
{
if( !IsBusy && CanSearch )
{
AppMessages.FilterAssetMessage.Send( txtSearch.Text );
}
}
catch( Exception ex )
{
// Notify user if there is any error
AppMessages.RaiseErrorMessage.Send( ex );
}
}
private void txtSearch_KeyUp( object sender, System.Windows.Input.KeyEventArgs e )
{
OnFilterCommand();
}
答案 1 :(得分:0)
如果您熟悉WPF以及WPF和Silverlight之间的差异,请查看扩展WPF工具包中的WatermarkTextBox:
http://wpftoolkit.codeplex.com/wikipage?title=WatermarkTextBox&referringTitle=Home
源代码可用,因此您可以尝试将该控件移植到Silverlight。