2009-10-19 9 views
7

कृपया मेरे उदाहरण में पकड़ा नहीं किए जाते हैं, बस प्रश्न के लिए मेरे साथ सहन:डब्ल्यूपीएफ में, मैं अपनी शैली को ओवरराइड होने से कैसे रोकूं?

मेरी WPF आवेदन में, अगर मैं एक "हरी" पृष्ठभूमि के लिए सभी बक्सें चाहता था, मैं आसानी से स्थापित करेगा यह मेरे आवेदन में है। स्रोत।

<Style TargetType="TextBox"> 
<Setter Property="Background" Value="Green" /> 
</Style> 

यह काम करता है पूरी तरह से ... (धन्यवाद WPF)। हालांकि, अगर मेरे पास मेरे एप्लिकेशन में टेक्स्टबॉक्स कहीं था तो मैं थोड़ा और स्टाइलिंग जोड़ना चाहता था ... I LOSE मेरी हरी पृष्ठभूमि।

उदाहरण:

<TextBox> 
<TextBox.Style> 
    <Style> 
    <Style.Triggers> 
    <Trigger Property="TextBox.IsMouseOver" Value="True"> 
    <Setter Property="TextBox.Foreground" Value="Red" /> 
    </Trigger> 
    </Style.Triggers> 
    </Style> 
</TextBox.Style> 
</TextBox> 

कि पाठ बॉक्स सही ढंग से लाल अग्रभूमि होगा जब माउस खत्म हो गया है, लेकिन हरे रंग की पृष्ठभूमि पूरी तरह से खो दिया है।

तो, सवाल यह है: मैं डब्ल्यूपीएफ को कैसे बता सकता हूं कि ऊपर से आने वाली सभी स्टाइल पूरी तरह से मिटा दें क्योंकि मेरे पास एक सरल, गैर-विरोधी है, ओह इतनी छोटी शैली कहीं नियंत्रण में शामिल है?

उत्तर

11

स्टाइल घोषणा में "आधारितऑन" का उपयोग करके आप पहले से ही ओवरराइड शैलियों का उत्तराधिकारी बना सकते हैं।

अपने दूसरे शैली के लिए घोषणा में, इस प्रयास करें:

<TextBox> 
<TextBox.Style> 
    <Style BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Style.Triggers> 
    <Trigger Property="TextBox.IsMouseOver" Value="True"> 
    <Setter Property="TextBox.Foreground" Value="Red" /> 
    </Trigger> 
    </Style.Triggers> 
    </Style> 
</TextBox.Style> 
</TextBox> 

तुम भी एक नामित शैली पर शैली का आधार कर सकते हैं,

<Style x:Key=MyNamedStyle> 
</Style> 

<Style BasedOn="{StaticResource MyNamedStyle}" > 
</Style> 
+0

यह सच है, लेकिन मूल रूप से कह रही है की तरह है "आप के लिए है उन सभी चीज़ों को शैलियों को फिर से जोड़ें जिन्हें आप ओवरराइड करना चाहते हैं "। :(- अच्छा जवाब, लेकिन मुझे उस समाधान से नफरत है। –

+0

मैं इसे एक कैस्केडिंग स्टाइल चीज़ के रूप में और अधिक सोचता हूं। ऐसे स्थान हो सकते हैं जहां आप अपनी अन्य शैली ओवरराइड का उत्तराधिकारी नहीं बनना चाहते हैं, या जहां आपके पास शैलियों के विभिन्न सेट हैं विभिन्न परिदृश्यों में एक ही प्रकार का नियंत्रण। इस तरह से आपको अधिक नियंत्रण मिल जाता है, इसलिए मुझे यह बहुत बुरा नहीं लगता है। –

+1

@ टिमोथी, आधारितऑन विशेषता का अर्थ है कि जब भी आप कक्षा उत्तीर्ण करते हैं, तब भी ओओपीएस में, विशेष रूप से शैली को विस्तारित करना संकलन स्तर आप बेस क्लास की सभी कार्यक्षमताओं को नई कक्षा में दोबारा जोड़ते हैं। विरासत का अर्थ है सबकुछ को बनाए रखना/प्रतिलिपि बनाना और कुछ हिस्सों को ओवरराइड करना। –

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