2009-04-09 21 views
10

WPF'de bazı garip davranışlar listesi var.wpf listview, odağı kaybetti

C# 'da uygulama geliştiriyoruz.

ListView'i bazı öğelerle oluşturdum ve Listenin ortasındaki dizinindeki bazı dizinlere SelectedIndex'i ayarladım. Ardından, ListView ve 'daki herhangi bir yerde fareyi tıklattım ve sonra Yukarı/Dows klavye tuşlarıyla gezin, her şey mükemmel çalışıyor. Ama Eğer ben başka denetime odak taşımak ve daha sonra o zaman sorunu alıyorum, kontrolü programlı ListView geri odak ayarlamaya çalışır.

ListView odağı alır, ama klavye ile gezinmek için çalışıyor Ia € ™ m, cari seçimi iptal edilecek ve ne zaman ilk madde seçilmiş olacak ve navigasyon listedeki ilk öğeden başlayacaktır.

Odağı, .Focus() yöntemini çağırarak ListView denetimine ayarlıyorum.

Odak ListView denetimine benziyor, ancak SelectedIndex bazı geçerli değerlere sahip olsa bile odağında gerçekte ürün yok.

Lütfen yardım edin! ListView denetimine odağı programlı olarak olarak nasıl ayarlayabilirim?

Liste görünümümün seçili dizininin odaklanmış öğeden farklı olduğunu öğrendim. kim ??? selectedindex_changed olay

i düzeltme öğesi (5) seçilen endeksini ayarlamak, ama ok tuşlarına bastığınızda madde değiştirildi. anlamına seçilen endeks 5 sabitlenir fakat (bunun çevresinde bir nokta kenarlıklı gösterilen) geçerli öğe ok tuşu yere taşınmış. neyse, benim selectitem'im 5'e kadar düzeltiyor, ancak scrollview'ım geçerli öğenin konumuna göre hareket ediyor.

Bu kod listede bulunmaktadırView1_SelectionChanged: listView1.SelectionMode = SelectionMode.Single; listView1.SelectedIndex = 5;

<l:PlainView x:Key="tileView" 
      ItemTemplate="{StaticResource centralTile}" 
      ItemHeight="120" ItemWidth="130" /> 

ben artık problom hakkında bilmiyorum:

benim liste görünümü değiştirilmiş bir görünümü vardır.

Saygılarımızla

+1

Bunun için bir çözüm buldunuz mu? Bende aynı problem var ve bunu anlayamıyorum! –

+0

Aramıyor .Focus() genel olarak herhangi bir GUI/çerçevede/dilde kötü bir uygulama mu? –

+0

Peki, odağı nasıl ayarlıyorsunuz o zaman? – Sam

cevap

6

ListView muhtemelen bağımsız olarak öğelerin odağı olabileceğini ListBox, yok aynı sorunu muzdarip. Ben, bir liste kutusu odaklanmak istediğinizde

, ben böyle bir şey yapmak gerekir:

listBox1.Focus(); 
if (listBox1.Items.Count > 0) 
{ 
    var index = listBox1.SelectedIndex; 
    if (index < 0) index = 0; 

    var item = listBox1.ItemsContainerGenerator 
        .ContainerFromIndex(index) as ListBoxItem; 
    item.Focus(); 
} 

Yani bu ListBox odaklanır, ama sonra ListBox o da odaklanır bir ürün seçmediniz öğesi veya içeriyorsa Biri seçilirse ilk öğe.

WPF'de ListView'ı hiç kullanmadım, ancak muhtemelen ListBoxItem yerine ListBox ve ListViewItem yerine ListView kullanarak benzer bir yöntemi bir araya getirebilirsiniz.

+1

Odaklanabilme = False, ListBox/ListView ayarını önerir, böylece bağımsız odaklama elde edemez, ve sadece aşağıdakileri kullanın: (uiListBox.SelectedItem! = Null) {(UIElement olarak uiListBox.SelectedItem) .Focus();} – rmoore

+4

Evet, ana bilgisayar kontrolünde Focusable = False ayarıyla oynamıştım, ancak liste boş olduğunda bazı garip odak problemleri veriyor. Bazen listeye özgü kısayol tuşlarını vb. Yakalayabilmeniz için bazen boş bir listeye odaklanmak istersiniz. Belki bir tetikleyici ile Items.Count'a bağlanabilir. –

+0

ListView, ListBox'ın bir alt öğesidir, örneğiniz benim için harika çalıştı. Değiştirdiğim tek şey, listBox1.SelectedIndex'i de 0'a ayarlamaktır, eğer (index <0), yani odak ve seçilen öğe eşleşiyorsa. – Sam