silverlight搜索文本框中的默认文本

时间:2011-05-18 15:47:36

标签: silverlight search default

我需要一个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";
 }

2 个答案:

答案 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。