Por exemplo, o Facebook tem um texto de dica "Pesquisar" na caixa de texto Pesquisar quando a caixa de texto está vazia.
Como fazer isso com caixas de texto WPF ??
.net
wpf
user-interface
textbox
Louis Rhys
fonte
fonte
Respostas:
Você pode fazer isso muito mais facilmente com um
VisualBrush
e alguns gatilhos emStyle
:Para aumentar a reutilização disso
Style
, você também pode criar um conjunto de propriedades anexadas para controlar o texto real do banner de sugestão, cor, orientação etc.fonte
Esta é minha solução simples, adaptada da Microsoft ( https://code.msdn.microsoft.com/windowsapps/How-to-add-a-hint-text-to-ed66a3c6 )
fonte
IsHitTestVisible="False"
que tal usar o materialDesign HintAssist? estou usando isso, e você também pode adicionar dica flutuante:
Eu instalei o Material Design com Pacote Nuget, há um guia de instalação no link de documentação
fonte
Faça isso no code-behind, definindo a cor do texto inicialmente para cinza e adicionando manipuladores de eventos para ganhar e perder o foco do teclado.
Em seguida, os manipuladores de eventos:
fonte
Você deve criar um controle personalizado herdando a caixa de texto. O link abaixo tem um excelente exemplo sobre a amostra da caixa de texto de pesquisa. Por favor, dê uma olhada nisso
http://davidowens.wordpress.com/2009/02/18/wpf-search-text-box/
fonte
Você pode fazer de uma forma muito simples. A ideia é colocar um rótulo no mesmo lugar da sua caixa de texto. Seu rótulo ficará visível se a caixa de texto não tiver texto e não tiver o foco.
Bônus: Se você quiser ter um valor padrão para o seu textBox, certifique-se de defini-lo depois de enviar os dados (por exemplo: "InputText" = "PlaceHolder Text Here" se estiver vazio).
fonte
Outra abordagem ;-)
isso também funciona com
PasswordBox
. Se quiser usar comTextBox
, basta trocarPasswordChanged
comTextChanged
.XAML:
Código por trás:
fonte
Uma vez entrei na mesma situação, resolvi da seguinte maneira. Eu cumpri apenas os requisitos de uma caixa de dica, você pode torná-la mais interativa adicionando efeitos e outras coisas em outros eventos, como foco etc.
CÓDIGO WPF (removi o estilo para torná-lo legível)
Código C #
fonte
Outra solução é usar um kit de ferramentas WPF como MahApps.Metro. Possui muitos recursos interessantes, como uma marca d'água de caixa de texto:
Controls:TextBoxHelper.Watermark="Search..."
Veja http://mahapps.com/controls/textbox.html
fonte
Usei os eventos de foco obtido e perdido:
Funciona bem, mas o texto ainda está cinza. Precisa de limpeza. Eu estava usando VB.NET
fonte
fonte
Essa é minha opinião:
A maioria das outras respostas, incluindo a primeira, tem falhas em minha opinião.
Esta solução funciona em todas as circunstâncias. XAML puro, facilmente reutilizável.
fonte
I fazer isso com um
VisualBrush
e alguns gatilhos em umStyle
sugerida por:sellmeadog
.@sellmeadog: Aplicativo em execução, design bt não carregando ... vem o seguinte erro: Referência de tipo ambígua. Um tipo denominado 'StaticExtension' ocorre em pelo menos dois namespaces, 'MS.Internal.Metadata.ExposedTypes.Xaml' e 'System.Windows.Markup'. Considere ajustar os atributos de XmlnsDefinition do assembly. estou usando .net 3.5
fonte
<Trigger Property="Text" Value="{x:Static sys:String.Empty}">
para<Trigger Property="Text" Value="">
Para WPF, não existe uma maneira. Você tem que imitar. Veja este exemplo . Uma solução secundária (solução fragmentada) é hospedar um controle de usuário WinForms que herda de TextBox e enviar a mensagem EM_SETCUEBANNER para o controle de edição. ie.
Além disso, se você deseja hospedar uma abordagem de controle WinForm, tenho uma estrutura que já inclui essa implementação chamada BitFlex Framework, que você pode baixar gratuitamente aqui .
Aqui está um artigo sobre o BitFlex se você quiser mais informações. Você começará a descobrir que se estiver procurando ter controles de estilo do Windows Explorer, isso geralmente nunca sai da caixa e, como o WPF não funciona com alças, geralmente você não pode escrever um wrapper fácil em torno do Win32 ou um controle existente como você pode com WinForms.
Captura de tela:
fonte