जब मैं एक ObservableCollection के साथ मेनू आइटम के लिए बाध्य है, केवल "आंतरिक" MenuItem का हिस्सा क्लिक करने योग्य है: तो फिरमैं ViewModels के एक ObservableCollection को मेनूइटम में कैसे बांध सकता हूं?
<Menu>
<MenuItem
Header="Options" ItemsSource="{Binding ManageMenuPageItemViewModels}"
ItemTemplate="{StaticResource MainMenuTemplate}"/>
</Menu>
:
alt text http://tanguay.info/web/external/mvvmMenuItems.png
मेरी देखें में मैं इस मेनू है मैं इसे डेटाटाम्प्लेट:
<DataTemplate x:Key="MainMenuTemplate">
<MenuItem
Header="{Binding Title}"
Command="{Binding DataContext.SwitchPageCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Menu}}}"
Background="Red"
CommandParameter="{Binding IdCode}"/>
</DataTemplate>
के साथ बाध्य करता हूं
प्रत्येक ViewModel के बाद से ObservableCollection ManageMenuPageItemViewModels में उपरोक्त कोड पहली नजर में ठीक काम करता है, एक संपत्ति शीर्षक और IdCode है।
हालांकि, समस्या यह है कि MenuItem DataTemplate में इतना है कि पृष्ठभूमि के साथ ऊपर DataTemplate में (जैसे कि वह दो बार बाध्य किया जा रहा है ) के अंदर एक और MenuItem वास्तव में है = " लाल " एक प्रत्येक मेनू आइटम के अंदर लाल बॉक्स और केवल इस क्षेत्र को क्लिक किया जा सकता है, पूरे मेनू आइटम क्षेत्र में नहीं (उदाहरण के लिए यदि उपयोगकर्ता उस क्षेत्र पर क्लिक करता है जहां चेकमार्क सही है या बाएं है आंतरिक सीएल के अचूक क्षेत्र, तो कुछ भी नहीं होता है, जो, यदि आपके पास कोई अलग रंग नहीं है तो बहुत भ्रमित है।)
व्यूमोडेल के एक अवलोकन करने योग्य चयन के लिए मेनूइटम को बांधने का सही तरीका क्या है ताकि प्रत्येक मेनूइटम के अंदर का पूरा क्षेत्र हो क्लिक करने योग्य?
अद्यतन:
तो मैं नीचे सलाह के आधार पर निम्न परिवर्तन किए और अब इस राशि:
alt text http://tanguay.info/web/external/mvvmMenuItemsYellow.png
मैं अपने DataTemplate अंदर केवल एक TextBlock है, लेकिन मैं अभी भी नहीं कर सकते हैं "रंग पूरे MENUITEM" लेकिन सिर्फ TextBlock:
<DataTemplate x:Key="MainMenuTemplate">
<TextBlock Text="{Binding Title}"/>
</DataTemplate>
और मैं कमान Menu.ItemCo में बाध्यकारी डाल ntainerStyle लेकिन वे अब आग नहीं है:
<Menu DockPanel.Dock="Top">
<Menu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Background" Value="Yellow"/>
<Setter Property="Command" Value="{Binding DataContext.SwitchPageCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Menu}}}"/>
<Setter Property="CommandParameter" Value="{Binding IdCode}"/>
</Style>
</Menu.ItemContainerStyle>
<MenuItem
Header="MVVM" ItemsSource="{Binding MvvmMenuPageItemViewModels}"
ItemTemplate="{StaticResource MainMenuTemplate}"/>
<MenuItem
Header="Application" ItemsSource="{Binding ApplicationMenuPageItemViewModels}"
ItemTemplate="{StaticResource MainMenuTemplate}"/>
<MenuItem
Header="Manage" ItemsSource="{Binding ManageMenuPageItemViewModels}"
ItemTemplate="{StaticResource MainMenuTemplate}"/>
</Menu>
+1 - सेपरेटर्स और सब कुछ के साथ पूर्ण उदाहरण के लिए बहुत अच्छा है। –
मेरे पास एक बहुत ही समान डिज़ाइन है और सब कुछ अलग करने वाला को छोड़कर काम करता है। यदि मैं टेम्पलेट को पर बदलता हूं तो मुझे "सेपरेटर" दिखाई देता है जहां एक विभाजक होना चाहिए। लेकिन जब मैं आपके उत्तर में टेम्पलेट का उपयोग करने की कोशिश करता हूं तो कुछ भी नहीं दिखाया जाता है। मैंने <सेपरेटर बॉर्डर थिक्नेस = "100" बॉर्डरब्रश = "ब्लैक"> और फिर विभाजक दिखाई दे रहा है, लेकिन मैं डिफ़ॉल्ट शैली को चौड़ाई के साथ मेनू चौड़ाई द्वारा निर्धारित चौड़ाई के साथ चाहता हूं। क्या मुझे कहीं सेपरेटर स्टाइलकी को परिभाषित करना है? मैंने ऑनलाइन खोज की लेकिन कुछ भी नहीं मिला जो मदद मिली ...धन्यवाद! – Dina