खोज…
टिप्पणियों
परिचयात्मक टिप्पणी
WPF में, एक शैली किसी दिए गए दृश्य तत्व के लिए एक या अधिक निर्भरता गुणों के मूल्यों को परिभाषित करता है। उपयोगकर्ता इंटरफ़ेस को और अधिक सुसंगत बनाने (जैसे सभी डायलॉग बटन को एक सुसंगत आकार देने) और बल्क परिवर्तन को आसान बनाने के लिए (उदाहरण के लिए, सभी बटन की चौड़ाई को बदलना) बनाने के लिए आवेदन भर में शैलियों का उपयोग किया जाता है।
शैलियाँ आमतौर पर एप्लिकेशन में एक उच्च स्तर पर एक ResourceDictionary
स्तर में परिभाषित की जाती हैं (उदाहरण के लिए App.xaml या किसी थीम में), इसलिए यह ऐप-वाइड उपलब्ध है, लेकिन उन्हें एक तत्व और उसके बच्चों के लिए भी परिभाषित किया जा सकता है, जैसे कि एक आवेदन करना एक StackPanel
अंदर सभी TextBlock
तत्वों के लिए शैली।
<StackPanel>
<StackPanel.Resources>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="5,5,5,0"/>
<Setter Property="Background" Value="#FFF0F0F0"/>
<Setter Property="Padding" Value="5"/>
</Style>
</StackPanel.Resources>
<TextBlock Text="First Child"/>
<TextBlock Text="Second Child"/>
<TextBlock Text="Third Child"/>
</StackPanel>
महत्वपूर्ण लेख
- वह स्थान जहाँ शैली परिभाषित की गई है, जहाँ वह उपलब्ध है, प्रभावित करता है।
- आगे के संदर्भों को
StaticResource
द्वारा हल नहीं किया जा सकता है। दूसरे शब्दों में, यदि आप एक ऐसी शैली को परिभाषित कर रहे हैं जो संसाधन शब्दकोश में किसी अन्य शैली या संसाधन पर निर्भर करती है, तो इसे उस संसाधन के बाद / नीचे परिभाषित किया जाना चाहिए जिस पर वह निर्भर करता है। -
StaticResource
शैलियों और अन्य संसाधनों को संदर्भित करने के लिए अनुशंसित तरीका है (प्रदर्शन और व्यवहारिक कारणों के लिए) जब तक कि आपको विशेष रूप सेDynamicResource
के उपयोग की आवश्यकता नहीं होती है, उदाहरण के लिए उन विषयों के लिए जिन्हें रनटाइम में बदला जा सकता है।
साधन
MSDN के पास शैलियों और संसाधनों पर पूरी तरह से लेख हैं जो यहां प्रदान करने की तुलना में अधिक गहराई है।
एक नामित शैली को परिभाषित करना
एक नामित शैली के लिए x:Key
आवश्यकता होती है x:Key
गुण सेट और केवल उन तत्वों पर लागू होता है जो इसे स्पष्ट रूप से नाम से संदर्भित करते हैं:
<StackPanel>
<StackPanel.Resources>
<Style x:Key="MyTextBlockStyle" TargetType="TextBlock">
<Setter Property="Background" Value="Yellow"/>
<Setter Property="FontWeight" Value="Bold"/>
</Style>
</StackPanel.Resources>
<TextBlock Text="Yellow and bold!" Style="{StaticResource MyTextBlockStyle}" />
<TextBlock Text="Also yellow and bold!" Style="{DynamicResource MyTextBlockStyle}" />
<TextBlock Text="Plain text." />
</StackPanel>
एक अंतर्निहित शैली को परिभाषित करना
एक अंतर्निहित शैली किसी दिए गए प्रकार के सभी तत्वों के दायरे में लागू होती है। एक निहित शैली x:Key
को छोड़ सकती है x:Key
चूंकि यह TargetType
रूप से शैली के TargetType
गुण के समान है।
<StackPanel>
<StackPanel.Resources>
<Style TargetType="TextBlock">
<Setter Property="Background" Value="Yellow"/>
<Setter Property="FontWeight" Value="Bold"/>
</Style>
</StackPanel.Resources>
<TextBlock Text="Yellow and bold!" />
<TextBlock Text="Also yellow and bold!" />
<TextBlock Style="{x:Null}" Text="I'm not yellow or bold; I'm the control's default style!" />
</StackPanel>
एक शैली से विरासत में
आधार शैली की आवश्यकता आम है जो एक ही नियंत्रण से संबंधित कई शैलियों के बीच साझा किए गए गुणों / मूल्यों को परिभाषित करती है, खासकर TextBlock
जैसी किसी चीज़ के लिए। यह BasedOn
संपत्ति का उपयोग करके पूरा किया गया है। मान विरासत में मिले हैं और फिर उन्हें ओवरराइड किया जा सकता है।
<Style x:Key="BaseTextBlockStyle" TargetType="TextBlock">
<Setter Property="FontSize" Value="12"/>
<Setter Property="Foreground" Value="#FFBBBBBB" />
<Setter Property="FontFamily" Value="Arial" />
</Style>
<Style x:Key="WarningTextBlockStyle"
TargetType="TextBlock"
BasedOn="{StaticResource BaseTextBlockStyle">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="FontWeight" Value="Bold" />
</Style>
ऊपर दिए गए उदाहरण में, किसी भी TextBlock
शैली का उपयोग करके WarningTextBlockStyle
TextBlock
लाल और बोल्ड में 12px एरियल के रूप में प्रस्तुत किया जाएगा।
क्योंकि निहित शैलियों में एक अंतर्निहित x:Key
जो उनके TargetType
मेल खाती है, आप उन्हें भी विरासत में दे सकते हैं:
<!-- Implicit -->
<Style TargetType="TextBlock">
<Setter Property="FontSize" Value="12"/>
<Setter Property="Foreground" Value="#FFBBBBBB" />
<Setter Property="FontFamily" Value="Arial" />
</Style>
<Style x:Key="WarningTextBlockStyle"
TargetType="TextBlock"
BasedOn="{StaticResource {x:Type TextBlock}}">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="FontWeight" Value="Bold" />
</Style>