Na przykład Facebook ma tekst wskazówki „Szukaj” w polu tekstowym Szukaj, gdy pole tekstowe jest puste.
Jak to osiągnąć dzięki polom tekstowym WPF?
.net
wpf
user-interface
textbox
Louis Rhys
źródło
źródło
Odpowiedzi:
Możesz to osiągnąć znacznie łatwiej za pomocą a
VisualBrush
i niektórych wyzwalaczy wStyle
:Aby zwiększyć możliwość ponownego
Style
użycia, możesz również utworzyć zestaw dołączonych właściwości, aby kontrolować rzeczywisty tekst, kolor, orientację itp.źródło
To jest moje proste rozwiązanie, zaadaptowane od firmy Microsoft ( https://code.msdn.microsoft.com/windowsapps/How-to-add-a-hint-text-to-ed66a3c6 )
źródło
IsHitTestVisible="False"
co z korzystaniem z materialDesign HintAssist? Używam tego, który również możesz dodać pływającą wskazówkę:
Zainstalowałem Material Design z pakietem Nuget. W linku do dokumentacji znajduje się instrukcja instalacji
źródło
Zrób to w kodzie, ustawiając początkowo kolor tekstu na szary i dodając programy obsługi zdarzeń w celu uzyskania i utraty fokusu klawiatury.
Następnie programy obsługi zdarzeń:
źródło
Musisz utworzyć niestandardową kontrolkę, dziedzicząc pole tekstowe. Poniższy link zawiera doskonały przykład dotyczący próbki pola tekstowego wyszukiwania. Proszę spojrzeć na to
http://davidowens.wordpress.com/2009/02/18/wpf-search-text-box/
źródło
Możesz to zrobić w bardzo prosty sposób. Pomysł polega na umieszczeniu etykiety w tym samym miejscu, w którym znajduje się pole tekstowe. Twoja etykieta będzie widoczna, jeśli pole tekstowe nie zawiera tekstu i nie jest fokusem.
Bonus: jeśli chcesz mieć domyślną wartość dla swojego textBox, pamiętaj, aby ustawić ją później podczas przesyłania danych (na przykład: „InputText” = „PlaceHolder Text Here”, jeśli jest puste).
źródło
Inne podejście ;-)
działa to również z
PasswordBox
. Jeśli chcesz go używaćTextBox
, po prostu zamień goPasswordChanged
zTextChanged
.XAML:
CodeBehind:
źródło
Kiedyś znalazłem się w tej samej sytuacji, rozwiązałem to w następujący sposób. Spełniłem tylko wymagania pola podpowiedzi, możesz uczynić go bardziej interaktywnym, dodając efekty i inne rzeczy do innych wydarzeń, takich jak skupienie itp.
KOD WPF (usunąłem style, aby były czytelne)
Kod C #
źródło
Innym rozwiązaniem jest użycie zestawu narzędzi WPF, takiego jak MahApps.Metro. Ma wiele fajnych funkcji, takich jak znak wodny w polu tekstowym:
Controls:TextBoxHelper.Watermark="Search..."
Zobacz http://mahapps.com/controls/textbox.html
źródło
Wykorzystałem zdarzenia „get and lost focus”:
Działa dobrze, ale tekst jest nadal szary. Potrzebuje posprzątania. Używałem VB.NET
źródło
źródło
To moja opinia:
Moim zdaniem większość innych odpowiedzi, w tym pierwsza, ma wady.
To rozwiązanie działa w każdych okolicznościach. Czysty XAML, łatwy do ponownego użycia.
źródło
I to osiągnąć z
VisualBrush
a niektóre wyzwalacze w AStyle
sugerowane przez:sellmeadog
.@sellmeadog: aplikacja działa, projekt bt nie ładuje się ... pojawia się następujący błąd: Niejednoznaczne odwołanie do typu. Typ o nazwie „StaticExtension” występuje w co najmniej dwóch przestrzeniach nazw: „MS.Internal.Metadata.ExposedTypes.Xaml” i „System.Windows.Markup”. Rozważ dostosowanie atrybutów XmlnsDefinition zestawu. Używam .net 3.5
źródło
<Trigger Property="Text" Value="{x:Static sys:String.Empty}">
na<Trigger Property="Text" Value="">
W przypadku WPF nie ma sposobu. Musisz to naśladować. Zobacz ten przykład . Pomocniczym (niestabilnym rozwiązaniem) jest hostowanie kontrolki użytkownika WinForms, która dziedziczy z TextBox i wysyłanie komunikatu EM_SETCUEBANNER do kontrolki edycji. to znaczy.
Ponadto, jeśli chcesz hostować podejście kontrolne WinForm, mam strukturę, która już zawiera tę implementację o nazwie BitFlex Framework, którą możesz pobrać bezpłatnie tutaj .
Tutaj jest artykuł o BitFlex, jeśli chcesz uzyskać więcej informacji. Zaczniesz odkrywać, że jeśli chcesz mieć elementy sterujące w stylu Eksploratora Windows, które zwykle nigdy nie wychodzą z pudełka, a ponieważ WPF nie działa z uchwytami, generalnie nie możesz napisać łatwego otoki wokół Win32 lub istniejącej kontrolki, tak jak możesz z WinForms.
Zrzut ekranu:
źródło