Tidak Dapat Menyeret Penghias ListBoxItem ke luar ListBox di WPF -ScrollViewerProblem

Saya bekerja dengan aplikasi WPF yang menggunakan banyak drag and drop. Semuanya berfungsi dengan baik, kecuali ListBoxItems. Saya memiliki ListBox dengan ListBoxItems yang dapat diseret ke target lain (StackPanel). Masalahnya adalah ketika saya menarik kursor ke luar ListBox, saya tidak dapat melihat Adorner yang telah saya setup dengan ListBoxItem?

Saya tahu ini adalah masalah umum, tapi saya tidak yakin bagaimana cara memperbaikinya. Apakah ada sesuatu yang perlu saya lakukan agar saya dapat menarik keluar dari kontrol ListBox?

Di bawah ini saya telah melampirkan tampilan UI sejauh ini. Seperti yang Anda lihat, ada ListBox di kiri bawah. Saat saya menyeret item, penghiasnya muncul, dan mengikuti kursor saat kursor berada di atas Kotak Daftar, tetapi jika saya mencoba memindahkan kursor menjauh dari kotak daftar, Penghiasnya sepertinya hampir berada di bawah kontrol lain (zIndex?) . masukkan deskripsi gambar di sini

Edit - Solusi Saya telah mengubah kode untuk menangani AdornerLayer yang berhubungan dengan jendela dan bukan yang berhubungan dengan AdornedElement

Jadi saya berubah

    layer = AdornerLayer.GetAdornerLayer(_originalElement);

to

    layer = AdornerLayer.GetAdornerLayer(this);

Ini memecahkan masalah ScrollViwer yang memotong AdornerLayer


person TheJediCowboy    schedule 16.02.2011    source sumber


Jawaban (1)


ListBox (atau, lebih spesifiknya, ScrollViewer di dalam kotak daftar) memotong semua penghias yang melekat pada turunannya. Hal ini dilakukan untuk memastikan bahwa hiasan untuk item yang di-scroll hingga tidak terlihat tidak ditampilkan. Untuk menyiasatinya, Anda perlu secara eksplisit meletakkan sesuatu di penghias Jendela dan bukan di kotak daftar atau item kotak daftar

person Robert Levy    schedule 17.02.2011
comment
ini masuk akal, tahukah Anda di mana saya dapat menemukan contoh cara melakukan ini, atau apakah Anda punya saran? Opsi lain yang saya pikirkan adalah menghilangkan kliping scrollviewer, dengan menggunakan StackPanel untuk item saya, bukan ListBox. - person TheJediCowboy; 17.02.2011
comment
Saya telah mampu menyelesaikan masalah ini. Saya telah menunjukkan kode yang saya ganti di atas. Terima kasih telah mengarahkan saya ke arah yang benar! - person TheJediCowboy; 17.02.2011
comment
Memanggil AdornerLayer.GetAdornerLayer(mainWindow) akan menghasilkan null. Anda dapat merujuk ke tautan - person YantingChen; 03.06.2019