Szukam sposobu, aby dodać tekst zastępczy do pola tekstowego, tak jak w przypadku pola tekstowego w html5.
To znaczy, jeśli pole tekstowe nie ma tekstu, to dodaje tekst Enter some text here
, gdy użytkownik go kliknie, tekst zastępczy znika i umożliwia użytkownikowi wprowadzenie własnego tekstu, a jeśli pole tekstowe traci fokus i nadal nie ma tekstu, to symbol zastępczy jest dodane z powrotem do pola tekstowego.
c#
wpf
placeholder
Boardy
źródło
źródło
Odpowiedzi:
Czy nie byłoby to coś takiego:
To tylko pseudokod, ale koncepcja istnieje.
źródło
RemoveText
iAddText
metoda powinna byćpublic void
, brakuje nieważne . Jak powiedział @BibaswannBandyopadhyay,RemoveText
metoda może wyglądać następująco:if (myTxtbx.Text == "Enter text here...") {myTxtbx.Text = "";}
Możesz tego użyć, działa dla mnie i jest niezwykle prostym rozwiązaniem.
Stosowanie:
Wcześniejsze
źródło
<ControlTemplate.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter Property="FocusManager.FocusedElement" TargetName="textSource" Value="{Binding RelativeSource={RelativeSource Self}}" /> </Trigger> </ControlTemplate.Triggers>
TextWrapping="wrap"
oba znaczniki TextBox w Style, na wypadek gdybyś chciał zrobić wieloliniowy TextBox z tekstem zastępczym, tak jak ja.<TextBox Text="{Binding Path=Text, RelativeSource=RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="textSource" Background="Transparent" Panel.ZIndex="2" MaxLength="{TemplateBinding MaxLength}" />
. W twoim przypadku prawdopodobnie musisz dodaćAcceptsReturn="{TemplateBinding AcceptsReturn}"
Zamiast obsługiwać zdarzenia wejścia i opuszczenia fokusa w celu ustawienia i usunięcia tekstu zastępczego, można użyć funkcji Windows SendMessage, aby wysłać
EM_SETCUEBANNER
wiadomość do naszego pola tekstowego, aby wykonać pracę za nas.Można to zrobić w dwóch łatwych krokach. Najpierw musimy ujawnić funkcję Windows
SendMessage
.Następnie po prostu wywołaj metodę z uchwytem naszego pola tekstowego, wartością EM_SETCUEBANNER i tekstem, który chcemy ustawić.
Odniesienie: Ustaw tekst zastępczy dla pola tekstowego (tekst podpowiedzi)
źródło
Dodaj tę klasę do swojego projektu i skompiluj swoje rozwiązanie. Kliknij, aby przejść do Toolbox w Visual Studio, zobaczysz nowy składnik Textbox o nazwie PlaceholderTextBox. Usuń swoje obecne pole tekstowe na designe formularza i zamień na PlaceHolderTextBox.
PlaceHolderTextBox ma właściwość PlaceHolderText. Ustaw dowolny tekst i miłego dnia :)
źródło
Text
właściwości (np. Pole tekstowe używane do filtrowania listy), do filtrowania zostanie użyty symbol zastępczy. Wartość zastępcza powinna być używana tylko do wyświetlania, dlategoText
tymczasowe zastępowanie właściwości nie jest dobrym pomysłem .using System; using System.Drawing; using System.Windows.Forms;
Dzięki za to!To nie jest mój kod, ale używam go dużo i działa idealnie ... TYLKO XAML
źródło
DataTrigger
go następującymiMultiDataTrigger
, działa jeszcze lepiej, moim skromnym zdaniem:<MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsFocused, ElementName=Textbox}" Value="false" /><Condition Binding="{Binding Text, ElementName=Textbox}" Value="" /></MultiDataTrigger.Conditions><MultiDataTrigger.Setters> <Setter Property="Visibility" Value="Visible"/></MultiDataTrigger.Setters></MultiDataTrigger>
Załączone nieruchomości na ratunek:
Stosowanie:
źródło
PlaceholderColor
withtypeof(Brush)
. Następnie zmieńtextBox.Foreground
właściwośćShowPlaceholder
metody i przywróć ją z powrotem wHidePlaceholder
metodzie.Chociaż używanie
EM_SETCUEBANNER
wiadomości jest prawdopodobnie najprostsze, nie podoba mi się to, że tekst zastępczy znika, gdy element sterujący staje się aktywny. To moje zwierzę irytacja, kiedy wypełniam formularze. Muszę go wyłączyć, aby zapamiętać, do czego służy to pole.Oto kolejne rozwiązanie dla WinForms. Nakłada się
Label
na element sterujący, który znika tylko wtedy, gdy użytkownik zacznie pisać.Z pewnością nie jest kuloodporny. Akceptuje dowolne
Control
, ale testowałem tylko z rozszerzeniemTextBox
. Może wymagać modyfikacji, aby działał z niektórymi kontrolkami. Metoda zwracaLabel
kontrolę w przypadku, gdy trzeba ją nieco zmodyfikować w określonym przypadku, ale może to nigdy nie być potrzebne.Użyj tego w ten sposób:
Oto metoda:
źródło
Na podstawie odpowiedzi ExceptionLimeCat, poprawa:
źródło
Możesz uzyskać wartość domyślną
Template
, zmodyfikować ją, nakładając aTextBlock
, i użyć a,Style
aby dodać wyzwalacze, które ukrywają i pokazują je we właściwych stanach.źródło
Oznaczałoby to, że masz przycisk, który umożliwia wykonanie akcji, na przykład zalogowanie się lub coś podobnego. Przed wykonaniem czynności sprawdzasz, czy pole tekstowe jest wypełnione. Jeśli nie, to zastąpi tekst
To trochę kiepskie, ale sprawdzanie tekstu pod kątem wartości, którą mu podajesz, jest najlepsze, co mogę zrobić, a nie za dobre w języku C #, aby uzyskać lepsze rozwiązanie.
źródło
źródło
Wymyśliłem metodę, która działała dla mnie, ale tylko dlatego, że chciałem użyć nazwy pola tekstowego jako symbolu zastępczego. Zobacz poniżej.
źródło
Oto rozwiązanie zainspirowane @Kemal Karadag.
Zauważyłem, że każde zamieszczone tutaj rozwiązanie polega na skupieniu się,
Chociaż chciałem, aby mój symbol zastępczy był dokładnym klonem standardowego symbolu zastępczego HTML w Google Chrome.
Zamiast ukrywać / pokazywać symbol zastępczy, gdy pole jest skupione,
Ukrywam / pokazuję symbol zastępczy w zależności od długości tekstu pola:
Jeśli pole jest puste, wyświetlany jest symbol zastępczy, a jeśli wpiszesz w polu, symbol zastępczy zniknie.
Ponieważ jest dziedziczony ze standardowego TextBox, możesz go znaleźć w swoim Toolbox!
źródło
Wypróbuj następujący kod:
źródło
txtUsuario.Attributes.Add ("symbol zastępczy", "Texto");
źródło
możesz to również zrobić po kliknięciu myszą, załóżmy, że Twój tekst zastępczy to „nazwa_użytkownika”
źródło
źródło
Zamiast używać właściwości .Text obiektu TextBox, nałożyłem TextBlock na symbol zastępczy. Nie mogłem użyć właściwości .Text, ponieważ została ona powiązana ze zdarzeniem.
XAML:
VB.NET
Wynik:
źródło
Możesz też spróbować w ten sposób.
wywołać funkcję
napisz tę funkcję
źródło
są LEPSZE rozwiązania, ale najłatwiejsze rozwiązanie jest tutaj: ustaw tekst pola tekstowego na żądany ciąg, a następnie utwórz funkcję, która usuwa tekst, uruchom tę funkcję w polu tekstowym Focus Enter event
źródło
Napisałem niestandardową kontrolkę wielokrotnego użytku, być może może pomóc komuś, kto musi zaimplementować wiele zastępczych pól tekstowych w swoim projekcie.
oto klasa niestandardowa z przykładem implementacji instancji, którą można łatwo przetestować, wklejając ten kod w nowym projekcie winForms przy użyciu VS:
źródło
Bardzo skutecznym rozwiązaniem tutaj o kontrolę WindowsForms tekstowym. (nie mam pewności co do XAML).
Działa to również w trybie Multliline.
Prawdopodobnie można go rozszerzyć o inne kontrolki, takie jak kontrolka ComboBox (niezaznaczona)
źródło
Działa jak marzenie.
źródło