यह एक बहुत लोकप्रिय विषय हो रहा है, लेकिन ...दृश्य पेड़ के माध्यम से ContextMenu menuitem से नियंत्रण का उपयोग कैसे करें?
मैं निम्नलिखित XAML है:
<internal:MyCommandObject x:Name="CommandModel"/>
<Button DockPanel.Dock="Bottom" Command="{Binding DoAction, ElementName=CommandModel}">
<Button.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget, RelativeSource={RelativeSource Self}}">
<MenuItem Command="{Binding DoAction, ElementName=CommandModel}"/>
</ContextMenu>
</Button.ContextMenu>
Click Me
</Button>
अब, MyCommandObject
एक नियंत्रण जो अपने DataContext
से गतिशील आदेशों को उजागर करता है। आप जानते हैं कि आगे क्या आ रहा है। :)
असल में, बटन कमांड पूरी तरह से काम करता है - जब मैं इसे क्लिक करता हूं, MyCommandObject
पर आदेश पूरी तरह से निष्पादित हो जाता है। हालांकि, मेन्यूटेम में कमांड निष्पादित नहीं होता है। मैंने placementTarget
होने के लिए संदर्भ मेनू datacontext
सेट करने जैसी विभिन्न चालों की कोशिश की है, इसलिए यह नियंत्रण के दृश्य पेड़ को पार कर सकता है और ऐसा कुछ भी नहीं कर रहा है।
RelativeSource
और CommandTarget
रनों का विशेष संरेखण क्या मुझे इसे काम करने की आवश्यकता है?
इसके लिए धन्यवाद। यदि संभव हो तो मैं कोड-बैक का उपयोग न करने की कोशिश कर रहा हूं - क्या एक्सएएमएल में नेमस्कोप को परिभाषित करना संभव है? दुर्भाग्य से, मैं मेनू आइटम का डेटा संदर्भ सेट करने के लिए बटन को सेट नहीं कर सकता। यह ग्रिड के लिए एक संदर्भ मेनू है, और मुझे चयनित आइटम के डेटाकॉन्टेक्स्ट की आवश्यकता है ताकि मैं उसमें गुणों को कमांड के पैरामीटर के रूप में पास कर सकूं। – Webreaper
पीछे कोड का उपयोग न करने का कारण यह है कि xaml संकलित नहीं है - देर से बाध्यकारी का उपयोग कर क्लाइंट में सब कुछ चलाया जाता है। – Webreaper
@Webreaper यह सुनिश्चित नहीं है कि आप केवल अपने परिदृश्य या जननांग के बारे में बात कर रहे हैं, लेकिन ज्यादातर XAML फ़ाइलों को निर्माण के समय बीएएमएल में संकलित किया गया है (आपके एक्सएमएल को देखते हुए जो मामला दिखता है); मैं आपको इन लिंक को संदर्भित करने का सुझाव दूंगा - [संकलित XAML = BAML नहीं आईएल] (http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/05/25/Compiled-XAML-\_3D00\_ -BAML-not-IL.aspx) और [बी के लिए है ... बीएएमएल] (http://blogs.msdn.com/b/jimoneil/archive/2009/01/12/b-is-for-baml।एएसपीएक्स) – akjoshi