2009-04-09 17 views
10

खो गया है मेरे पास WPF में ListView नियंत्रण का कुछ अजीब व्यवहार है।wpf listview फोकस

हम सी # में आवेदन विकसित कर रहे हैं।

मैंने कुछ आइटमों के साथ ListView बनाया है और इसकी सूची के बीच में कुछ इंडेक्स में चयनित इंडेक्स सेट किया है। फिर मैंने ListView और पर किसी भी स्थान पर माउस क्लिक किया और फिर ऊपर/डॉव कीबोर्ड कुंजी के साथ नेविगेट किया, सब कुछ पूरी तरह से काम करता है। लेकिन अगर मैं फ़ोकस को दूसरे नियंत्रण में ले जाता हूं और फिर प्रोग्रामवेटिक रूप से ListView नियंत्रण पर फ़ोकस सेट करने का प्रयास करता है, तो मुझे समस्या मिल रही है।

ListView फोकस हो जाता है, लेकिन जब IA € ™ मी कीबोर्ड के साथ नेविगेट करने के लिए कोशिश कर रहा है, वर्तमान चयन को रद्द कर दिया जाएगा और पहले आइटम चयनित हो जाएगा और नेविगेशन सूची में पहले आइटम से शुरू कर देंगे।

मैं इसकी फ़ोकस() विधि पर कॉल करके ListView नियंत्रण पर ध्यान केंद्रित कर रहा हूं।

यह फोकस में सूची दृश्य नियंत्रण की तरह दिखता है, लेकिन फ़ोकस में वास्तव में कोई आइटम नहीं है, भले ही चयनित इंडेक्स के कुछ वैध मान हों।

कृपया मेरी मदद करें! मैं पर प्रोग्रामिव रूप से ListView नियंत्रण पर फ़ोकस कैसे सेट कर सकता हूं?

मुझे पता चला कि मेरी सूचीदृश्य चयनित इंडेक्स केंद्रित आइटम से अलग है। कौन ???

चयनितindex_changed ईवेंट में मैंने चयनित इंडेक्स को फिक्स्ड आइटम (5) पर सेट किया है, लेकिन जब मैं तीर कुंजियों को दबाता हूं तो आइटम बदल दिया गया था। इसका मतलब है कि चयनित इंडेक्स 5 पर तय किया गया है लेकिन वर्तमान आइटम (इसके चारों ओर एक डॉट सीमा के साथ दिखाया गया है) तीर कुंजी स्थान पर ले जाया गया है। वैसे भी मेरा चुने गए 5 को ठीक कर दिया गया है, लेकिन मेरे स्क्रॉलव्यू उस स्थिति में स्थानांतरित हो जाते हैं जो वर्तमान आइटम है।

यह कोड सूची में है दृश्य 1_SelectionChanged: listView1.SelectionMode = SelectionMode.Single; listView1.SelectedIndex = 5;

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

मुझे नहीं किसी भी अधिक problom के बारे में पता:

मेरी सूचीदृश्य एक संशोधित दृश्य है।

संबंध

+1

अरे क्या आपको इस के लिए कोई समाधान मिला? मेरे पास एक ही समस्या है और इसे समझ नहीं सकता! –

+0

कॉल नहीं कर रहा है। फोकस() आमतौर पर किसी भी जीयूआई/ढांचे/भाषाओं में एक बुरा अभ्यास? –

+0

तो, फिर आप फोकस कैसे सेट करते हैं? – Sam

उत्तर

6

ListView शायद ही समस्या से ग्रस्त है ListBox, करता है कि में है कि यह ध्यान देने के अपने आइटम की स्वतंत्र रूप से हो सकता है।

जब मैं एक ListBox ध्यान केंद्रित करना चाहते हैं, मैं कुछ इस तरह करने की जरूरत है:

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(); 
} 

तो यह ListBox केंद्रित है, लेकिन फिर ListBox किसी भी आइटम यह या तो केंद्रित चयनित आइटम, या है या नहीं पहला आइटम अगर कोई चुना गया है।

मैंने कभी भी WPF में ListView का उपयोग नहीं किया है, लेकिन संभवतः आप ListBoxItem के स्थान पर ListBox और ListViewItem के बजाय ListView का उपयोग करके एक समान विधि को एक साथ जोड़ सकते हैं।

+1

मैं सूची बॉक्स/सूची दृश्य पर फोकसबल = गलत सेट करने की अनुशंसा करता हूं, ताकि वह स्वतंत्र फोकस प्राप्त न कर सके, और उसके बाद केवल (uiListBox.SelectedItem! = Null) {(uiListBox.SelectedItem UIElement के रूप में)। फ़ोकस();} – rmoore

+4

हाँ, मैंने मेजबान नियंत्रण पर फोकसबल = झूठी सेटिंग के साथ खिलवाड़ किया है, लेकिन यह सूची खाली होने पर आपको कुछ अजीब फोकस समस्याएं देती है। कभी-कभी आप अभी भी एक खाली सूची में फोकस करना चाहते हैं ताकि आप सूची-विशिष्ट शॉर्टकट कुंजियां इत्यादि पकड़ सकें। शायद आइटम पर फोकस करने योग्य बाध्यकारी। ट्रिगर के साथ गणना बेहतर काम करेगी। –

+0

ListView ListBox का एक बच्चा है, इसलिए आपका उदाहरण मेरे लिए बहुत अच्छा काम करता है। केवल एक चीज जो मैंने बदल दी है वह है सूची बॉक्स 1। चयन करने के लिए इंडेक्स 0, भी, अगर (इंडेक्स <0), तो फोकस और चयनित आइटम मिलान। – Sam

संबंधित मुद्दे