Saya memiliki tooltip untuk Label dan saya ingin tetap terbuka sampai pengguna menggerakkan mouse ke kontrol yang berbeda.
Saya telah mencoba properti berikut di tooltip:
StaysOpen="True"
dan
ToolTipService.ShowDuration = "60000"
Namun dalam kedua kasus, keterangan alat hanya ditampilkan tepat selama 5 detik.
Mengapa nilai-nilai ini diabaikan?
ShowDuration
properti, anggaplah itu seperti itu30,000
. Apa pun yang lebih besar dari itu dan akan default kembali ke5000
.ToolTipService.ShowDuration="60000"
berhasil. Itu tidak default untuk kembali ke5000
.ToolTipService.ShowDuration
properti ke nilai apa pun > = 0 (ke Int32.MaxValue) namun tooltip tidak akan tetap terbuka selama itu.Jawaban:
Letakkan saja kode ini di bagian inisialisasi.
sumber
new FrameworkPropertyMetadata("Top")
tidak bekerja.TooltipService.ShowDuration
berfungsi, tetapi Anda harus mengaturnya pada objek yang memiliki Tooltip, seperti ini:Saya akan mengatakan bahwa desain ini dipilih karena memungkinkan tooltip yang sama dengan waktu tunggu yang berbeda pada kontrol yang berbeda.
sumber
ToolTip
secara langsung, tanpa eksplisit<ToolTip>
, yang dapat membuat pengikatan lebih sederhana.Ini juga membuatku gila malam ini. Saya membuat
ToolTip
subclass untuk menangani masalah tersebut. Bagi saya, di .NET 4.0,ToolTip.StaysOpen
properti tidak "benar-benar" tetap buka.Di kelas di bawah ini, gunakan properti baru
ToolTipEx.IsReallyOpen
, bukan propertiToolTip.IsOpen
. Anda akan mendapatkan kendali yang Anda inginkan. MelaluiDebug.Print()
panggilan, Anda dapat melihat di jendela Output debugger berapa kalithis.IsOpen = false
dipanggil! Begitu banyakStaysOpen
, atau haruskah saya katakan"StaysOpen"
? Nikmati.Kata-kata kasar kecil: Mengapa Microsoft tidak membuat
DependencyProperty
properti (getter / setter) virtual sehingga kami dapat menerima / menolak / menyesuaikan perubahan dalam subclass? Atau buatvirtual OnXYZPropertyChanged
untuk setiapDependencyProperty
? Ugh.--- Edit ---
Solusi saya di atas terlihat aneh di editor XAML - tooltip selalu ditampilkan, memblokir beberapa teks di Visual Studio!
Berikut cara yang lebih baik untuk mengatasi masalah ini:
Beberapa XAML:
Beberapa kode:
Kesimpulan: Ada sesuatu yang berbeda tentang kelas
ToolTip
danContextMenu
. Keduanya memiliki kelas "layanan", sepertiToolTipService
danContextMenuService
, yang mengelola properti tertentu, dan keduanya digunakanPopup
sebagai kontrol induk "rahasia" selama tampilan. Akhirnya, saya perhatikan SEMUA contoh XAML ToolTip di Web tidak menggunakan classToolTip
secara langsung. Sebaliknya, mereka menyematkan aStackPanel
denganTextBlock
s. Hal yang membuatmu berkata: "hmmm ..."sumber
Anda mungkin ingin menggunakan Popup daripada Tooltip, karena Tooltip mengasumsikan bahwa Anda menggunakannya dengan cara standar UI yang telah ditentukan sebelumnya.
Saya tidak yakin mengapa StaysOpen tidak berfungsi, tetapi ShowDuration berfungsi seperti yang didokumentasikan di MSDN - ini adalah jumlah waktu Tooltip ditampilkan SAAT ditampilkan. Setel ke jumlah kecil (mis. 500 mdet) untuk melihat perbedaannya.
Trik dalam kasus Anda adalah mempertahankan status "kontrol yang diarahkan terakhir", tetapi setelah Anda memilikinya, mengubah target penempatan dan konten secara dinamis (baik secara manual, atau melalui penjilidan) jika Anda menggunakan salah satu Pop-up, atau menyembunyikan Pop-up terakhir yang terlihat jika Anda menggunakan beberapa.
Ada beberapa masalah dengan Popup sejauh mengubah ukuran dan memindahkan Jendela (Popup tidak bergerak dengan kontainer), jadi Anda mungkin ingin juga mengingatnya saat Anda menyesuaikan perilakunya. Lihat tautan ini untuk lebih jelasnya.
HTH.
sumber
Jika Anda ingin menentukan bahwa hanya elemen tertentu dalam Anda yang
Window
memilikiToolTip
durasi efektif tak terbatas, Anda dapat menentukan aStyle
di AndaWindow.Resources
untuk elemen tersebut. Berikut ini adalahStyle
untukButton
yang memiliki sepertiToolTip
:Anda juga dapat menambahkan
Style.Resources
untukStyle
mengubah tampilan yangToolTip
ditampilkannya, misalnya:Catatan: Ketika saya lakukan saya ini juga digunakan
BasedOn
dalamStyle
sehingga segala sesuatu yang lain yang ditetapkan untuk versi kontrol kustom saya dengan normalToolTip
akan diterapkan.sumber
Saya bergulat dengan WPF Tooltip hanya beberapa hari yang lalu. Sepertinya tidak mungkin untuk menghentikannya agar tidak muncul dan menghilang dengan sendirinya, jadi pada akhirnya saya terpaksa menangani
Opened
acara tersebut. Misalnya, saya ingin menghentikannya dari pembukaan kecuali ada beberapa konten, jadi saya menanganiOpened
acara tersebut dan kemudian melakukan ini:Ini hack, tapi berhasil.
Agaknya Anda juga dapat menangani
Closed
acara tersebut dan menyuruhnya untuk dibuka kembali, sehingga membuatnya tetap terlihat.sumber
Hanya demi kelengkapan: Dalam kode terlihat seperti ini:
sumber
Juga jika Anda ingin meletakkan kontrol lain di ToolTip Anda, itu tidak akan bisa difokuskan karena ToolTip itu sendiri bisa mendapatkan fokus. Seperti yang dikatakan micahtan, bidikan terbaik Anda adalah Popup.
sumber
Memperbaiki masalah saya dengan kode yang sama.
ToolTipService.ShowDurationProperty.OverrideMetadata (typeof (DependencyObject), baru FrameworkPropertyMetadata (Int32.MaxValue));
sumber
Ini berhasil untuk saya. Salin baris ini ke konstruktor kelas Anda.
sumber