Текст по умолчанию в текстовом поле поиска Silverlight - PullRequest
0 голосов
/ 18 мая 2011

Мне нужна функция в текстовом поле silverlight, аналогичная функциональность, как в текстовом поле Задать вопрос «Заголовок» в stalkoverflow. Если в текстовом поле нет текста, то должно отображаться «Поиск». Когда пользователь щелкает текстовое поле, текст текстового поля должен быть пустым, а текстовое поле теряет фокус, если текст пустой, тогда отображается «Поиск». Я написал следующий код, но есть ли код, который обрабатывает все возможные условия?

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 ]

1 голос
/ 09 июня 2011

Вы можете использовать события 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();
    }
0 голосов
/ 18 мая 2011

Если вы знакомы с WPF и различиями между WPF и Silverlight, взгляните на WatermarkTextBox в расширенном наборе инструментов WPF:

http://wpftoolkit.codeplex.com/wikipage?title=WatermarkTextBox&referringTitle=Home

Источник доступен, поэтому вы можете попробовать перенести этот элемент управления на Silverlight.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...