This article is currently in the process of being translated into Hindi (~91% done).
The TextBlock control
TextBlock is not a control, per se, since it doesn't inherit from the Control class, but it's used much like any other control in the WPF framework, so we'll call it a control to keep things simple.
टेक्स्टब्लॉक कन्ट्रोल, WPF के कन्ट्रोल समूह का एक मौलिक कन्ट्रोल है, फिर भी बहूत उपयोगी है। इससे स्क्रीन पर टेक्स्ट लिख सकते है ( जैसा कि लेवल कन्ट्रोल से करते है ) वो भी साधारण व न्यूनतम संसाधन का उपयोग करते हुए। लेवल कन्ट्रोल, छोटे तथा सिंगल लाईन ( जिसमें चित्र भी हो सकते है ) वाले टेक्स्ट के लिए है, जबकि टेक्स्टब्लॉक मल्टीलाईन टेक्स्ट के लिए अच्छा है, लेकिन इसमें चित्र नही डाल सकते। टेक्स्टब्लॉक तथा लेवल दोनों की अपनी अलग विशेषताएँ है तथा इनका उपयोग बहुत कुछ आपकी आवश्यकता पर निर्भर करता हैं।
हमने पहले ही "हैलो, WPF !" लेख में एक टेक्स्टब्लॉक कंट्रोल का इस्तेमाल किया था। लेकिन अभी के लिए चलिए TextBlock को इसके सबसे सरल रूप में देखते हैं:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="100" Width="200">
<Grid>
<TextBlock>This is a TextBlock</TextBlock>
</Grid>
</Window>
यह उतना ही सरल है जितना यह आता है और यदि आपने इस ट्यूटोरियल के पिछले अध्यायों को पढ़ा है, तो यहाँ कुछ भी नया नहीं होना चाहिए। TextBlock के बीच text TextBlock की property सेट करने के लिए बस एक शॉर्टकट है।
अगले उदाहरण के लिए, आइए यह दिखाने के लिए एक लंबे text की कोशिश करें कि टेक्स्टब्लॉक उस से कैसे निपटता है। मैंने भी थोड़ा सा मार्जिन जोड़ा है, ताकि यह थोड़ा बेहतर दिख सके:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="100" Width="200">
<Grid>
<TextBlock Margin="10">This is a TextBlock control and it comes with a very long text</TextBlock>
</Grid>
</Window>
लंबे strings से निपटना
जैसा कि आप जल्द ही स्क्रीनशॉट से महसूस करेंगे, टेक्स्टब्लॉक लंबे, बहुस्तरीय ग्रंथों से निपटने में पूरी तरह से सक्षम है, लेकिन यह डिफ़ॉल्ट रूप से कुछ भी नहीं करेगा। इस मामले में text विंडो के अंदर प्रदान करने के लिए बहुत लंबा है, इसलिए WPF जितना संभव हो उतना पाठ का प्रतिपादन करता है और फिर बस रुक जाता है।
सौभाग्य से, इससे निपटने के कई तरीके हैं। अगले उदाहरण में मैं आपको उन सभी को दिखाऊंगा, और फिर मैं उनमें से प्रत्येक को बाद में समझाऊंगा:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="200" Width="250">
<StackPanel>
<TextBlock Margin="10" Foreground="Red">
This is a TextBlock control<LineBreak />
with multiple lines of text.
</TextBlock>
<TextBlock Margin="10" TextTrimming="CharacterEllipsis" Foreground="Green">
This is a TextBlock control with text that may not be rendered completely, which will be indicated with an ellipsis.
</TextBlock>
<TextBlock Margin="10" TextWrapping="Wrap" Foreground="Blue">
This is a TextBlock control with automatically wrapped text, using the TextWrapping property.
</TextBlock>
</StackPanel>
</Window>
इसलिए, हमारे पास तीन TextBlock Controls हैं, प्रत्येक एक आसान अवलोकन के लिए एक अलग रंग (फोरग्राउंड Property का उपयोग करके) के साथ है। वे सभी इस तथ्य को संभालते हैं कि उनकी text सामग्री विभिन्न तरीकों से बहुत लंबी है:
red TextBlock एक निर्दिष्ट स्थान पर लाइन को मैन्युअल रूप से तोड़ने के लिए LineBreak टैग का उपयोग करता है। यह आपको पूर्ण नियंत्रण देता है जहां आप चाहते हैं कि text एक नई पंक्ति पर टूट जाए, लेकिन यह अधिकांश स्थितियों के लिए बहुत लचीला नहीं है। यदि उपयोगकर्ता विंडो को बड़ा बनाता है, तो text अभी भी उसी स्थिति में होगा, भले ही अब एक पंक्ति में पूरे text को फिट करने के लिए पर्याप्त जगह हो।
green TextBlock TextTrimming का उपयोग करता है, जिसके साथ CharacterEllipsisTextBlock को एक दीर्घवृत्त (..) दिखाने के लिए ।) जब यह नियंत्रण में किसी भी अधिक text को फिट नहीं कर सकता है। यह दिखाने का एक सामान्य तरीका है कि अधिक text है, लेकिन इसे दिखाने के लिए पर्याप्त जगह नहीं है। यह बहुत अच्छा है जब आपके पास text होता है जो बहुत लंबा हो सकता है लेकिन आप बिल्कुल नहीं चाहते कि यह एक से अधिक लाइन का उपयोग करे। CharacterEllipsis के विकल्प के रूप में आप WordEllipsis का उपयोग कर सकते हैं, जो अंतिम संभव अक्षर के बजाय अंतिम संभव शब्द के अंत में text को ट्रिम करेगा, जिससे एक शब्द ही रोका जा सके, भाग में दिखाया गया है।
blue TextBlock TextWrapping मान के साथ गुण <Wrap का उपयोग करता है, अगली पंक्ति में TextBlock wraping के लिए जब भी यह पिछली पंक्ति में text को फिट नहीं कर सकता है। पहले टेक्स्टब्लॉक के विपरीत, जहां हम मैन्युअल रूप से परिभाषित करते हैं कि टेक्स्ट को कहाँ लपेटना है, यह पूरी तरह से स्वचालित और बेहतर होता है: टेक्स्टब्लॉक के अधिक या कम स्थान उपलब्ध होते ही यह स्वचालित रूप से समायोजित हो जाता है। उदाहरण में खिड़की को बड़ा या छोटा करने का प्रयास करें और आप देखेंगे कि स्थिति से मिलान करने के लिए रैपिंग को कैसे अपडेट किया गया है।
यह सब TextBlock में सरल strings से निपटने के बारे में था। अगले अध्याय में, हम TextBlock के कुछ और अधिक उन्नत कार्यक्षमता पर ध्यान देंगे, जो हमें TextBlock के भीतर विभिन्न शैलियों के text बनाने की अनुमति देता है और बहुत कुछ।