ऐसे एप्लिकेशन का निर्माण करना जिसमें बाहरी उपयोग के लिए कस्टम 'हाई कंट्रास्ट' थीम है जिसे रनटाइम के दौरान चालू और बंद किया जा सकता है। यह विलय और एक संसाधन शब्दकोश कि नीचे की तरह शैलियों शामिल अन-मर्ज करके ठीक काम करता है ...स्टाइल आधारित के लिए डायनामिक रिसोर्स
<Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template" Value="{StaticResource Theme_MenuItemTemplate}"/>
</Style>
यह महान काम करता है जब एक MENUITEM के उपयोग एक शैली निर्दिष्ट नहीं है। हालांकि यह कई यथार्थियों के लिए यथार्थवादी नहीं है क्योंकि स्टाइल के बिना आइटम्ससोर्स जेनरेट किए गए बच्चों को बांधने का कोई तरीका नहीं है। उदाहरण के लिए:
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Path=Name}"/>
<Setter Property="IsCheckable" Value="True"/>
<Setter Property="IsChecked" Value="{Binding Path=Checked}"/>
<EventSetter Event="Checked" Handler="HistoryItem_Checked"/>
</Style>
</ContextMenu.ItemContainerStyle>
StackOverflow पर हर अन्य पोस्ट का कहना है कि आप सिर्फ यह करने की आवश्यकता ...
<Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
<!-- Your overrides -->
</Style>
लेकिन यह मेरी स्थिति के लिए काम नहीं करता क्योंकि मेरे basedon और कार्यावधि में बदल जाएगा कर सकते हैं (और निश्चित रूप से आप BasedOn प्रॉपर्टी पर डायनामिक रिसोर्स एक्सटेंशन का उपयोग नहीं कर सकते हैं)। मेरे आवेदन में ऐसा करने से वर्तमान में नियंत्रण होता है जो नियंत्रण को लोड करते समय अपनी शैली के साथ अटक जाते हुए ओवरराइड करते हैं जबकि हर दूसरे नियंत्रण को पुनः लोड किए बिना सही ढंग से स्विच किया जाता है।
तो मेरे सवाल ...
वहाँ एक रास्ता basedon के लिए काम DynamicResource विस्तार पाने के लिए है या किसी अन्य विधि है/मैं इस काम करने के लिए प्राप्त करने के लिए लागू कर सकते हैं हैक?
आधार शैलियों की प्रतिलिपि बनाने का एक आसान तरीका है। मैंने इसे एक नए जवाब में जोड़ा। – aliceraunsbaek