Saya memiliki WPF ListView sederhana dan pertanyaan sederhana:
Apakah mungkin untuk mematikan seleksi, jadi ketika pengguna mengklik baris, baris tersebut tidak disorot?
Saya ingin baris 1 terlihat seperti baris 0 saat diklik.
Mungkin terkait: dapatkah saya mengatur gaya tampilan hover / selection? Misalnya. untuk mengganti tampilan hover gradien biru (baris 3) dengan warna solid kustom. Saya telah menemukan ini dan ini , sayangnya tidak membantu.
(Mencapai hal yang sama tanpa menggunakan ListView juga dapat diterima. Saya hanya ingin dapat menggunakan pengguliran logis dan virtualisasi UI seperti yang dilakukan ListView)
XAML untuk ListView adalah:
<ListView Height="280" Name="listView">
<ListView.Resources>
<!-- attempt to override selection color -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightColorKey}"
Color="Green" />
</ListView.Resources>
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
<!-- more columns -->
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
Jawaban:
Sesuai komentar Martin Konicek, untuk menonaktifkan sepenuhnya pemilihan item dengan cara yang paling sederhana:
Namun, jika Anda masih memerlukan fungsionalitas ListView, seperti dapat memilih item, Anda dapat menonaktifkan gaya item yang dipilih secara visual seperti:
Anda dapat melakukan ini dengan berbagai cara, dari mengubah ControlTemplate ListViewItem hingga hanya menyetel gaya (jauh lebih mudah). Anda dapat membuat gaya untuk ListViewItems menggunakan ItemContainerStyle dan 'mematikan' latar belakang dan kuas tepi saat dipilih.
Selain itu, kecuali Anda memiliki cara lain untuk memberi tahu pengguna saat item dipilih (atau hanya untuk pengujian), Anda dapat menambahkan kolom untuk mewakili nilai:
sumber
BasedOn="{StaticResource {x:Type ListViewItem}}"
sehingga tidak menimpa gaya kisi saya yang lain, tetapi saya juga berpikir Anda harus membuat komentar Anda sebagai jawaban yang diterimaJawaban Moore tidak berfungsi, dan halaman di sini:
Menentukan Warna Pilihan, Perataan Konten, dan Warna Latar Belakang untuk item dalam Kotak Daftar
menjelaskan mengapa itu tidak bisa berhasil.
Jika tampilan daftar Anda hanya berisi teks dasar, cara paling sederhana untuk menyelesaikan masalah adalah dengan menggunakan kuas transparan.
Ini akan menghasilkan hasil yang tidak diinginkan jika sel listview menahan kontrol seperti kotak kombo, karena itu juga mengubah warnanya. Untuk mengatasi masalah ini, Anda harus menentukan ulang template kontrol.
sumber
Setel gaya setiap ListViewItem agar Focusable disetel ke false.
sumber
Berikut template default untuk ListViewItem dari Blend:
Template ListViewItem Default:
Hapus saja IsSelected Trigger dan IsSelected / IsSelectionActive MultiTrigger, dengan menambahkan kode di bawah ini ke Style Anda untuk mengganti template default, dan tidak akan ada perubahan visual saat dipilih.
Solusi untuk mematikan perubahan visual properti IsSelected:
sumber
Cara termudah yang saya temukan:
sumber
ListView.ItemContainerStyle
!Lebih jauh ke solusi di atas ... Saya akan menggunakan MultiTrigger untuk memungkinkan sorotan MouseOver terus bekerja setelah pemilihan sedemikian rupa sehingga gaya ListViewItem Anda akan menjadi:
sumber
Oke, sedikit terlambat ke permainan, tetapi tidak ada solusi ini yang benar-benar melakukan apa yang saya coba lakukan. Solusi ini memiliki beberapa masalah
Saya menginginkan ListView dengan tajuk pengelompokan, dan setiap ListViewItem seharusnya hanya 'informatif' tanpa seleksi atau arahkan kursor, tetapi ListViewItem memiliki tombol di dalamnya yang saya ingin agar dapat diklik dan diarahkan ke atas.
Jadi, sebenarnya yang saya inginkan adalah ListViewItem sama sekali bukan ListViewItem, Jadi, saya menaiki ControlTemplate ListViewItem dan membuatnya menjadi ContentControl sederhana.
sumber
Salah satu properti listview adalah
IsHitTestVisible
. Hapus centangnya.sumber
IsHitTestVisible
tombol tidak dapat diklik. Ini bertindak sepertiIsEnabled = false;
Ini untuk orang lain yang mungkin mengalami persyaratan berikut:
Jika Anda seperti saya (menggunakan WPF dengan .NET 4.5) dan menemukan bahwa solusi yang melibatkan pemicu gaya tidak berfungsi, inilah solusi saya:
Ganti ControlTemplate dari ListViewItem dengan gaya:
..Dan DataTemplate:
Hasil ini pada saat runtime (item 'B' dipilih, item 'D' memiliki mouse):
sumber
Gunakan kode di bawah ini:
sumber
Kode di bawah menonaktifkan pemilihan baris ListViewItem dan juga memungkinkan untuk menambahkan padding, margin, dll.
sumber
Di bawah kode nonaktifkan Fokus pada ListViewItem
sumber