2011-02-06 22 views
12

मुझे मेनू खोलने की आवश्यकता है और चूंकि WP7 not designed ऐसे क्रियाएं करने के लिए है, इसलिए मैं टूलकिट की सहायता ले रहा हूं। नमूना कोड निम्नलिखित है:ContextMenu टैप करने के बजाय टैप पर

<Border BorderThickness="3" Padding="6"> 
    <toolkit:ContextMenuService.ContextMenu> 
     <toolkit:ContextMenu> 
      <toolkit:MenuItem Header="item1" Click="Item1_Click" /> 
      <toolkit:MenuItem Header="item2" Click="Item2_Click" /> 
      <toolkit:MenuItem Header="item3" Click="Item3_Click" /> 
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 
    <TextBlock Text="Tap" /> 
</Border> 

अब यह ठीक काम करता है जब तक उपयोगकर्ता एक प्रेस करता है और कार्रवाई करता है। लेकिन मैं इस तरह की कार्रवाई के लिए उपयोगकर्ता से नहीं पूछ सकता। मुझे मेनू को एक क्लिक/टैप/टच/इशारा (जिसे आप इसे कॉल करना चाहते हैं) पर प्रदर्शित करने की आवश्यकता है। क्या कोई सुझाव दे सकता है? यदि आपको लगता है कि टूलकिट सबसे अच्छा तरीका नहीं है, तो कृपया नमूना कोड के साथ विकल्पों का सुझाव दें। मैंने पॉपअप की कोशिश की लेकिन यह मेरे आवेदक

उत्तर

14

आप GestureListenerBorder पर जोड़ सकते हैं और Tap ईवेंट की सदस्यता ले सकते हैं। ईवेंट हैंडलर में, आपको ContextMenuBorder के लिए मिलता है और IsOpen को सत्य पर सेट करता है यदि उसके पास तार्किक अभिभावक नहीं है।

<Border BorderThickness="3" Padding="6"> 
    <toolkit:GestureService.GestureListener> 
     <toolkit:GestureListener Tap="GestureListener_Tap" /> 
    </toolkit:GestureService.GestureListener> 
    <toolkit:ContextMenuService.ContextMenu> 
     <toolkit:ContextMenu> 
      <toolkit:MenuItem Header="item1" Click="Item1_Click" /> 
      <toolkit:MenuItem Header="item2" Click="Item2_Click" /> 
      <toolkit:MenuItem Header="item3" Click="Item3_Click" /> 
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 
    <TextBlock Text="Tap" /> 
</Border> 

private void GestureListener_Tap(object sender, GestureEventArgs e) 
{ 
    Border border = sender as Border; 
    ContextMenu contextMenu = ContextMenuService.GetContextMenu(border); 
    if (contextMenu.Parent == null) 
    { 
     contextMenu.IsOpen = true; 
    } 
} 
+0

वह काम करता है। एक और बात। चयनित विकल्प को हाइलाइट करने के बारे में कोई विचार। मैं सिर्फ पंक्ति पंक्ति रंग सेट के साथ चयनित पंक्ति को ग्रे या कुछ – Ravi

+1

@Ravi के साथ हाइलाइट करना चाहता हूं: क्या आपको 'ContextMenu' खोलने से पहले कुछ स्थितियों के आधार पर चयनित' MenuItem' को हाइलाइट करना होगा? हो सकता है कि 'MenuItem' नाम दें और 'menuItem1.Background = new SolidColorBrush (Colors.Gray) सेट करें;' –

+0

कंडीशन पर आधारित ... धन्यवाद ... मैंने इसे मेन्यूटेम पर नहीं देखा लेकिन कहीं और इस्तेमाल किया और एक आकर्षण की तरह काम करता है। – Ravi

0

यदि आप अपने आवेदन के लिए एक संदर्भ मेनू चाहते हैं, तो ContextMenu और ContextMenuService लेने के लिए सबसे अच्छा तरीका है क्योंकि यह तीसरे पक्ष और पूर्व-स्थापित अनुप्रयोगों में मानक है । उपयोगकर्ता पहले से ही 'टैप-एंड-होल्ड' इशारा समझते हैं, इसलिए इसके आसपास काम करना प्रति-सहज होगा।

हैं (जो भी कारण के लिए) आप एक ही नल से एक ContextMenu शुरू करनी होगी, तो आप हमेशा स्रोत कोड ContextMenu.cs के लिए सिल्वरलाइट Toolkit से इतना है कि बजाय Hold घटना यह Tap घटना हुक hooking अनुकूलित कर सकते हैं।

+0

हाय डेरेक, जिसने बहुत मदद नहीं की। इस तथ्य को ध्यान में रखते हुए कि मैं WP7 और Silverlight के लिए काफी नया हूं, मैंने surce code की जांच की लेकिन मुझे बहुत कुछ समझ में नहीं आया। क्या आप कृपया टैप बदलने और बस टैप करने के लिए कार्रवाई करने में मेरी मदद कर सकते हैं? – Ravi

+0

सिल्वरलाइट टूलकिट के लिए स्रोत कोड डाउनलोड करें, मैंने संदर्भित स्रोत फ़ाइल खोलें, 'होल्ड + = '' को 'टैप + =', रीकंपाइल करें, नई प्रोजेक्ट में अपने प्रोजेक्ट में संदर्भ अपडेट करें। मुझे अभी भी संदेह है कि बहुत अधिक बदलते डिफ़ॉल्ट व्यवहार को जाने का सही तरीका है। –

+0

हाय डेरेक, आप शायद सही हैं। मुझे मेलेक के सुझाव के साथ जाना चाहिए और इशारा सेवा का उपयोग करना चाहिए। धन्यवाद वैसे भी – Ravi