2010-10-14 24 views
7

के सभी क्षेत्रों से ContextMenu कैसे खोलें I WPF में ListBox में आइटम्स में ContextMenu जोड़ने का प्रयास कर रहा हूं;WPF: ग्रिड नियंत्रण

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <Border>       
      <Grid> 
       <Grid.ContextMenu> 
        <ContextMenu>          
         <MenuItem Header = "Menu item 1"/> 
         <MenuItem Header = "Menu item 2"/> 
         <MenuItem Header = "Menu item 3"/> 
        </ContextMenu> 
       </Grid.ContextMenu> 
        ........ 
        ........ 
      </Grid> 
     </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 

समस्या यह है कि ContextMenu केवल खुल जाएगा जब ग्रिड की वास्तविक संदर्भ पर क्लिक करके, मैं लिस्टबॉक्स आइटम पर कहीं भी क्लिक करके मेनू खोलने के लिए सक्षम होने के लिए चाहते हैं।

क्या मुझे ग्रिड को किसी अन्य नियंत्रण में लपेटना चाहिए?

+0

देखें http://stackoverflow.com/questions/13420994/how-to-display-context-menu-for-treeview-item- में एक hierarchial-डेटा-टेम्पलेट-इन/28310591 # 28310591 – Contango

उत्तर

17

यह कई महीनों से रहा है क्योंकि मैंने कोई ठोस WPF विकास किया है (एप्लिकेशन विकास से वास्तविक गेम टीम में स्थानांतरित किया गया था)।

स्मृति से, आप ContextMenu पर Border पर संपत्ति सेट करना चाहते हैं और फिर Border.Background=Transparent सेट करें। पृष्ठभूमि को पारदर्शी में सेट करना सुनिश्चित करता है कि यह हिट डिटेक्शन में भाग लेगा।

वैकल्पिक समाधान, यह सुनिश्चित करेगा कि आप Grid तत्व कंटेनर फिट करने के लिए क्षैतिज और लंबवत फैलाएंगे।

...

इसके अलावा, ContextMenu एक स्थिर संसाधन के रूप में बाहर खींच इतना है कि है भविष्य में/संपादन को खोजने के लिए आसान हो जाएगा।

उम्मीद है कि यह मदद करता है (और मेरी याददाश्त मुझे विफल नहीं करती है)।

संपादित करें: मैंने पहले स्टैक ओवरव्लो पर एक समान प्रश्न का उत्तर दिया है, कृपया WPF: Displaying a Context Menu for a GridView's Items पर मेरा उत्तर देखें। यह उत्तर अधिक पूर्ण है क्योंकि यह ListItem पर फ़ोकस सेट करता है।

2

जैसा कि आप पहले ही महसूस कर चुके हैं, - डेनिस के लिए धन्यवाद, - आपको कुछ पृष्ठभूमि सेट करनी है। हाँ, पारदर्शी पृष्ठभूमि भी ठीक है:

  <Grid Background="Transparent"> 
      <Grid.ContextMenu> 
       <ContextMenu>          
        <MenuItem Header = "Menu item 1"/> 
        <MenuItem Header = "Menu item 2"/> 
        <MenuItem Header = "Menu item 3"/> 
       </ContextMenu> 
      </Grid.ContextMenu> 
       ........ 
       ........ 
     </Grid> 

संदर्भ: https://blogs.msdn.microsoft.com/domgreen/2008/12/08/wpf-hit-testing-with-event-bubbling/

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