2009-06-22 13 views
39

पर सेट करना मैं सिर्फ WPF में थोड़ा सा पोकिंग कर रहा था और चाहता था कि मेरी विंडो पर सभी तत्व समान मार्जिन साझा करें।एक स्टाइल की टार्गेट टाइप संपत्ति को बेस क्लास

<Window.Resources> 
<Style TargetType="{x:Type FrameworkElement}"> 
    <Setter Property="Margin" Value="10" /> 
</Style> 
</Window.Resources> 

और, यह काम नहीं करता: मैंने पाया कि सभी नियंत्रण है कि एक मार्जिन होने में सक्षम हैं FrameworkElement से निकाले जाते हैं तो मैं निम्नलिखित की कोशिश की। मैं इसे सभी बटनों पर लागू कर सकता हूं, लेकिन बटन से प्राप्त सभी तत्वों के लिए नहीं। क्या मुझे कुछ याद आ रहा है या क्या यह संभव नहीं है?

क्या मैं केवल डब्ल्यूपीएफ के लिए सीएसएस का उपयोग करने की तरह महसूस कर रहा हूं, यह एक अच्छा विचार होगा?

+2

मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन आप केवल एक ही नहीं हैं। सीएसएस सही नहीं है लेकिन सीएसएस की तुलना में _worse_ नहीं है जो कुछ ऐसा उपयोग करना अच्छा विचार होता। –

उत्तर

54

दुर्भाग्यवश, आप आधार फ्रेमवर्क एलिमेंट प्रकार पर शैलियों को लागू नहीं कर सकते हैं; जबकि डब्ल्यूपीएफ आपको शैली लिखने देगा, यह इसे उस नियंत्रण से लागू नहीं करेगा जो इससे प्राप्त होता है। ऐसा प्रतीत होता है कि यह फ्रेमवर्क एलिमेंट के उपप्रकारों पर भी लागू होता है, उदा। बटनबेज, बटन/टॉगल बटन/दोहराना बटन का सुपरटेप।

आप अभी भी विरासत का उपयोग कर सकते हैं, लेकिन आपको उस नियंत्रण प्रकार पर लागू करने के लिए स्पष्ट BasedOn वाक्यविन्यास का उपयोग करना होगा, जिसे आप इसे लागू करना चाहते हैं।

<Window.Resources> 
    <Style TargetType="{x:Type FrameworkElement}"> 
     <Setter Property="Margin" Value="10" /> 
    </Style> 

    <Style TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type FrameworkElement}}" /> 
    <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type FrameworkElement}}" /> 
    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type FrameworkElement}}" /> 

</Window.Resources> 

+1

धन्यवाद। मैंने इसके बारे में भी सोचा, लेकिन अगर मैं खिड़की पर मौजूद सभी तत्वों पर एक शैली को लागू करना चाहता हूं तो यह बहुत धीमा लगता है। – Tigraine

+4

यहां काम नहीं करता है। मुझे XamlParseException मिलता है कि लक्ष्य टाइप टाइप दूसरे प्रकार से मेल नहीं खाता है। मैंने इसे अपने बटन-व्युत्पन्न वर्ग और सामान्य बटन पर करने की कोशिश की। – ygoe

+1

तो ऐप में सभी नियंत्रणों के लिए वैश्विक शैली को लागू करने का एक बेहतर तरीका है? – Shimmy

7

मुद्दा यह है कि जब एक शैली के लिए खोज WPF सभी वर्गों वर्तमान एक निकला है जहाँ से माध्यम से खोज नहीं करता है। हालांकि आप शैली को एक कुंजी दे सकते हैं और इसे उन सभी तत्वों पर लागू कर सकते हैं जिनके लिए आप एक आम संपत्ति चाहते हैं। यदि ऐसी शैली शैली में निर्दिष्ट है जिसे आप जिस तत्व पर स्टाइल कर रहे हैं, उस पर लागू नहीं किया जा सकता है, इसे अनदेखा किया जाता है।

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