सभी नियंत्रणों को लक्षित कैसे करें (WPF शैलियाँ)


90

क्या मैं एक शैली निर्दिष्ट कर सकता हूं जो सभी तत्वों पर लागू होती है? मैंने कोशिश की

<Style TargetType="Control">
    <Setter Property="Margin" Value="0,5" />
</Style>

लेकिन इसने कुछ नहीं किया

जवाबों:


120

Styleआपके द्वारा बनाए केवल लक्षित कर रहा है Controlऔर न तत्वों कि से निकाले जाते हैं Control। जब आप x:Keyइसे सेट नहीं करते हैं तो यह TargetTypeआपके मामले में निहित है x:Key="{x:Type Control}"

किसी भी Styleलक्ष्य को निर्दिष्ट करने का कोई सीधा तरीका नहीं है जो सभी तत्वों को प्राप्त करता है जो से प्राप्त होता TargetTypeहै Style। आपके पास कुछ अन्य विकल्प हैं।

यदि आपके पास निम्नलिखित है Style

<Style x:Key="ControlBaseStyle" TargetType="{x:Type Control}">
    <Setter Property="Margin" Value="50" />
</Style>

आप Buttonsउदाहरण के लिए सभी को लक्षित कर सकते हैं

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}"/>

या किसी भी तत्व पर सीधे शैली का उपयोग करें, जैसे Button

<Button Style="{StaticResource ControlBaseStyle}" ...>

मैं सोच रहा था कि एक लक्ष्य प्रकार के साथ मेरी शैली मेरे FrameworkElementसभी नियंत्रणों पर लागू क्यों नहीं हो रही है - इसने उस प्रश्न का उत्तर दिया!
qJake

4
क्या वास्तव में यह भद्दा है, कि मुझे खिड़की पर रखे गए सभी प्रकार के नियंत्रणों के लिए शैली को निर्दिष्ट करना चाहिए, न कि केवल कुछ मूल चीज़ों के लिए सभी के लिए ???
Ond .ej

7

जैसा कि फ्रेड्रिक हेडब्लैड ने उत्तर दिया कि आप नियंत्रण से विरासत में मिले सभी तत्वों को प्रभावित कर सकते हैं।

लेकिन आप उदाहरण के लिए एक ही शैली के साथ टेक्स्टब्लॉक और बटन के लिए शैली लागू नहीं कर सकते।

ऐसा करने के लिए:

    <Style x:Key="DefaultStyle" TargetType="{x:Type FrameworkElement}">
        <Setter Property="Control.Margin" Value="50"/>
    </Style>
    <Style TargetType="TextBlock" BasedOn="{StaticResource DefaultStyle}"/>
    <Style TargetType="Button" BasedOn="{StaticResource DefaultStyle}"/>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.