Saya mencari cara untuk menambahkan teks placeholder ke kotak teks seperti Anda bisa dengan kotak teks di html5.
Yaitu jika kotak teks tidak memiliki teks, maka itu menambahkan teks Enter some text here
, ketika pengguna mengkliknya teks placeholder menghilang dan memungkinkan pengguna untuk memasukkan teks mereka sendiri, dan jika kotak teks kehilangan fokus dan masih ada teks maka placeholder adalah ditambahkan kembali ke kotak teks.
c#
wpf
placeholder
Boardy
sumber
sumber
Jawaban:
Bukankah itu hanya sesuatu seperti ini:
Itu hanya pseudocode tetapi konsepnya ada di sana.
sumber
RemoveText
danAddText
metode haruspublic void
, hilang batal . Dan seperti yang dikatakan @BibaswannBandyopadhyay,RemoveText
metodenya bisa seperti ini:if (myTxtbx.Text == "Enter text here...") {myTxtbx.Text = "";}
Anda dapat menggunakan ini, ini berfungsi untuk saya dan merupakan solusi yang sangat sederhana.
Pemakaian:
sumber
<ControlTemplate.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter Property="FocusManager.FocusedElement" TargetName="textSource" Value="{Binding RelativeSource={RelativeSource Self}}" /> </Trigger> </ControlTemplate.Triggers>
TextWrapping="wrap"
menempel pada kedua tag TextBox di Style, jika Anda ingin melakukan TextBox multi-line dengan teks Placeholder seperti yang saya lakukan.<TextBox Text="{Binding Path=Text, RelativeSource=RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="textSource" Background="Transparent" Panel.ZIndex="2" MaxLength="{TemplateBinding MaxLength}" />
. Dalam kasus Anda, Anda mungkin perlu menambahkanAcceptsReturn="{TemplateBinding AcceptsReturn}"
Alih-alih menangani fokus masuk dan meninggalkan acara untuk mengatur dan menghapus teks placeholder, dimungkinkan untuk menggunakan fungsi Windows SendMessage untuk mengirim
EM_SETCUEBANNER
pesan ke kotak teks kami untuk melakukan pekerjaan untuk kami.Ini bisa dilakukan dengan dua langkah mudah. Pertama kita perlu mengekspos
SendMessage
fungsi Windows .Kemudian cukup panggil metode dengan pegangan kotak teks kami, nilai EM_SETCUEBANNER dan teks yang ingin kami atur.
Referensi: Tetapkan teks placeholder untuk kotak teks (teks isyarat)
sumber
Tambahkan kelas ini proyek Anda dan bangun solusi Anda. Klik untuk Toolbox di visual studio Anda akan melihat komponen kotak teks baru bernama PlaceholderTextBox. Hapus kotak teks Anda saat ini pada formulir desain dan ganti dengan PlaceHolderTextBox.
PlaceHolderTextBox memiliki PlaceHolderText properti. Setel teks yang Anda inginkan dan selamat bersenang-senang :)
sumber
Text
properti (misalnya kotak teks yang digunakan untuk memfilter daftar), placeholder akan digunakan untuk memfilter. Nilai placeholder seharusnya hanya digunakan untuk menampilkan, oleh karena itu bukan ide yang baik untuk menggantiText
properti sementara.using System; using System.Drawing; using System.Windows.Forms;
Terima kasih untuk ini!Ini bukan kode saya, tapi saya sering menggunakannya dan berfungsi dengan sempurna ... XAML ONLY
sumber
DataTrigger
yang berikut iniMultiDataTrigger
, itu berfungsi lebih baik menurut pendapat saya:<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>
Properti terlampir pada penyelamatan:
Pemakaian:
sumber
PlaceholderColor
dengan namatypeof(Brush)
. Kemudian ubahtextBox.Foreground
properti dalamShowPlaceholder
metode dan kembalikan kembali keHidePlaceholder
metode.Meskipun menggunakan
EM_SETCUEBANNER
pesan mungkin paling sederhana, satu hal yang saya tidak suka adalah bahwa teks placeholder menghilang ketika kontrol mendapat fokus. Itu kesal saya ketika saya mengisi formulir. Saya harus mengkliknya untuk mengingat untuk apa bidang ini.Jadi di sini adalah solusi lain untuk WinForms. Itu overlay
Label
di atas kontrol, yang menghilang hanya ketika pengguna mulai mengetik.Ini tentu bukan antipeluru. Ini menerima apa pun
Control
, tetapi saya hanya menguji denganTextBox
. Mungkin perlu modifikasi untuk bekerja dengan beberapa kontrol. Metode mengembalikanLabel
kontrol jika Anda perlu mengubahnya sedikit dalam kasus tertentu, tetapi itu mungkin tidak pernah diperlukan.Gunakan seperti ini:
Inilah metodenya:
sumber
Berdasarkan jawaban ExceptionLimeCat, peningkatan:
sumber
Anda bisa mendapatkan default
Template
, memodifikasinya dengan overlayTextBlock
, dan menggunakanStyle
untuk menambahkan pemicu yang menyembunyikan dan menampilkannya di negara bagian yang tepat.sumber
Ini berarti Anda memiliki tombol yang memungkinkan Anda melakukan tindakan, seperti masuk atau sesuatu. Sebelum Anda melakukan tindakan, Anda memeriksa apakah kotak teks diisi. Jika tidak, itu akan menggantikan teks
Ini agak murahan tetapi memeriksa teks untuk nilai yang Anda berikan itu adalah yang terbaik yang bisa saya lakukan atm, tidak begitu baik di c # untuk mendapatkan solusi yang lebih baik.
sumber
sumber
Saya datang dengan metode yang bekerja untuk saya, tetapi hanya karena saya bersedia menggunakan nama kotak teks sebagai pengganti saya. Lihat di bawah.
sumber
Di sini saya datang dengan solusi ini yang terinspirasi oleh @Kalal Karadag.
Saya perhatikan bahwa setiap solusi yang diposting di sini mengandalkan fokus,
Sementara saya ingin placeholder saya menjadi tiruan yang tepat dari placeholder HTML standar di Google Chrome.
Alih-alih menyembunyikan / menunjukkan tempat penampung saat kotak difokuskan,
Saya menyembunyikan / menampilkan placeholder tergantung pada panjang teks dari kotak:
Jika kotak kosong, placeholder ditampilkan, dan jika Anda mengetikkan kotak, placeholder menghilang.
Karena diwarisi dari TextBox standar, Anda dapat menemukannya di Toolbox Anda!
sumber
Coba kode berikut:
sumber
txtUsuario.Attributes.Add ("placeholder", "Texto");
sumber
Anda juga dapat melakukannya saat mouse mengklik, misalkan teks placeholder Anda adalah "User_Name"
sumber
sumber
Alih-alih menggunakan properti .Text dari TextBox, saya overlay TextBlock dengan placeholder. Saya tidak dapat menggunakan properti .Text karena ini diikat ke suatu Acara.
XAML:
VB.NET
Hasil:
sumber
Anda juga bisa mencoba dengan cara ini ..
panggil fungsinya
tulis fungsi ini
sumber
ada solusi yang LEBIH BAIK, tetapi solusi termudah di sini: atur teks kotak teks ke string yang Anda inginkan lalu buat fungsi yang menghapus teks, buat fungsi itu menyala di kotak teks Fokus Masukkan acara
sumber
Saya menulis kontrol kustom yang dapat digunakan kembali, mungkin dapat membantu seseorang yang perlu menerapkan beberapa kotak teks placeholder dalam proyeknya.
di sini adalah kelas kustom dengan contoh implementasi contoh, Anda dapat menguji dengan mudah dengan menempelkan kode ini pada proyek winforms baru menggunakan VS:
sumber
Solusi yang sangat efektif di sini untuk kontrol WindowsForms TextBox. (tidak yakin tentang XAML).
Ini juga akan berfungsi dalam mode Multliline.
Mungkin dapat diperluas untuk kontrol lain, seperti kontrol ComboBox (tidak dicentang)
sumber
Bekerja seperti pesona.
sumber