2012-07-31 14 views
7

क्या WPF में WinForms से इस कार्यक्षमता को पूरा करने का कोई तरीका है?सूची दृश्य में फोकस करें WPF

ListView.FocusedItem = ListView.Items[itemToFocusIndex] 

मैं कोशिश कर रहा हूँ मैन्युअल WPF ListView में आइटम पर फोकस (चयन नहीं) स्थापित करने के लिए। सिस्टम से। Windows.Controls। धन्यवाद।

उत्तर

18

लौटना चाहिए WPF में ध्यान के दो प्रकार के होते हैं - कीबोर्ड फोकस और तार्किक ध्यान दें। This link आपको डब्ल्यूपीएफ में फोकस के बारे में अधिक जानकारी दे सकता है।

आप ऐसा या तो कर सकते हैं:

ListViewItem item = myListView.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem; 
item.Focus(); 

यह भी

Keyboard.Focus(item); 

कॉल करने के लिए आप भी आइटम की स्थिति के लिए ListView स्क्रॉल करने के लिए चाहते हैं, तो संभव है, इस जोड़ें:

myListView.ScrollIntoView(item); 

महत्वपूर्ण नोट: इसके लिए बदतर के, आपको VirtualizingStackPanel.IsVirtualizing="False" को अपने ListView पर सेट करने की आवश्यकता होगी, जो इसे धीमा करने का कारण बन सकता है। इस संलग्न संपत्ति की आवश्यकता होने का कारण यह है कि जब ListView वर्चुअलाइज्ड (जो डिफ़ॉल्ट रूप से होता है), ListViewItems उन आइटम्स के लिए नहीं बनाए जाते हैं जो स्क्रीन पर प्रदर्शित नहीं होते हैं, जिससे null लौटने के लिए कारण होगा।

+0

वैसे मुझे आपके कोड के पीछे विचार मिला है, लेकिन यह _myListView.Items [itemIndex] के रूप में काम नहीं कर रहा है IInputElement; _ रिटर्न _null_। ListView में आइटम मेरी कस्टम क्लास के उदाहरण हैं और इंस्टॉलेशन प्रॉपर्टी के अनुसार रनटाइम पर उचित शैली का चयन किया जाता है। वर्ग क्रमशः किसी वर्ग या इंटरफ़ेस को लागू करने का वारिस नहीं करता है; इसलिए मैं इसे IInputElement पर नहीं डाल सकता ... – jnovacho

+0

@jnovacho 'UIElement' से उत्तराधिकारी कोई नियंत्रण' IInputElement' लागू करता है। 'MyListView.Items [itemIndex]' से आपको किस प्रकार की वस्तु मिलती है? –

+0

मुझे उस संग्रह से केवल ऑब्जेक्ट मिलता है। – jnovacho

0

मेरा मानना ​​है कि आप कीबोर्डदृश्य का उपयोग कर सकते हैं। फ़ोकसव्यूमेंट सूची में केंद्रित तत्व प्राप्त करने के लिए।

Keyboard.FocusedElement 

केंद्रित तत्व

+0

मुझे ध्यान केंद्रित करने की आवश्यकता नहीं है, मुझे ** ** ** ध्यान केंद्रित करने की आवश्यकता है। – jnovacho

0
public void foucusItem(ListView.Item itemToFocusIndex){ 
     int count = 0; 
     foreach(ListView.Item item in YourListView){ 
       if(item == itemsToFocusIndex){ 
        ListView.Items[count].Focus(); 
        return; 
       } 
     count++; 
     } 
    } 
+0

कोई फोकस() विधि नहीं है। मैं डब्ल्यूपीएफ फॉर्म का उपयोग नहीं कर रहा हूँ! – jnovacho

+0

सुनिश्चित करें कि इसकी फ़ोकस योग्य संपत्ति सत्य पर सेट है। – Zac

+0

http://msdn.microsoft.com/en-us/library/system.windows.controls.listview.aspx मुझे लगता है कि एक फोकस() विधि है। तरीकों के तहत आधा रास्ता नीचे लिंक देखें। – Zac

0
//to set focus write 
CollistView7.Items[TheIndItem].Selected = true; 
CollistView7.Select(); 
CollistView7.Items[TheIndItem].Focused = true; 
//when TheIndItem is the index 
0

ListView आइटम UIElements हैं, तो बस UIElement.Focus() का उपयोग करें। उदाहरण के लिए, listViewItem.Focus() या button.Focus() और इसी तरह।

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