2015-03-28 6 views
13

में बनाम बनाम सामग्री बनाम पाठ एक WPF (या यहां तक ​​कि एक विंडोज 8 या 8.1 एप्लिकेशन) में आपके पास नियंत्रण में टेक्स्ट जोड़ने के तीन संभावित तरीके हैं। TextBlock तत्वWP बनाम

<TextBlock Text="My text" /> 
  • Text तत्व के रूप में संपत्ति के विशेषता के रूप में

    1. Run तत्व के अंदर TextBlock तत्व

      <TextBlock> 
          <Run>My text</Run> 
      </TextBlock> 
      
    2. Text संपत्ति TextBlock तत्व के अंदर

      <TextBlock> 
          <TextBlock.Text>my text</TextBlock.Text> 
      </TextBlock>` 
      

    इन तीन दृष्टिकोणों के बीच अंतर क्या हैं? और ComboboxItem के लिए TextBlock और Content के लिए आपको Text का उपयोग क्यों करना चाहिए?

  • +0

    ऑनलाइन दस्तावेज और WPF के बारे में कुछ अच्छी किताबें भी हैं, जहां इन नियंत्रणों और उनके मतभेदों को विस्तार से समझाया गया है। – Clemens

    +0

    @ हेन आप कैसे संकलित करने में सक्षम थे 3. और 4.? क्या आप और कोड जोड़ सकते हैं? मेरे उदाहरण आवेदन में यह संकलित नहीं करता है – Domysee

    उत्तर

    24

    Text संपत्ति के साथ एक नियंत्रण केवल एक स्ट्रिंग स्वीकार कर सकता है और उस नियंत्रण द्वारा नियंत्रित एक विशिष्ट तरीके से प्रस्तुत किया जाता है। ऐसे नियंत्रणों के उदाहरण TextBlock और TextBox हैं।

    Content संपत्ति के साथ नियंत्रण वास्तव में उस संपत्ति पर सेट object हो सकता है। ये नियंत्रण आम तौर पर संपत्ति पर ContentPresenter पर मान को आगे बढ़ाते हैं।

    ContentPresenter सामग्री प्रदर्शित करने के लिए निम्न तर्क का उपयोग करता: ContentPresenter Class प्रलेखन इस प्रासंगिक ब्लॉक है

    • ContentPresenter पर ContentTemplate संपत्ति सेट है, तो ContentPresenter कि DataTemplate सामग्री संपत्ति पर लागू होता है और परिणामी UIElement और उसके बच्चे तत्व, यदि कोई हो, प्रदर्शित होते हैं। DataTemplate ऑब्जेक्ट्स के बारे में अधिक जानकारी के लिए, डेटा टेम्पलेटिंग अवलोकन देखें।
    • यदि सामग्री प्रस्तुतकर्ता पर ContentTemplateSelector प्रॉपर्टी सेट की गई है, तो सामग्री प्रदाता सामग्री प्रॉपर्टी पर उचित डेटा टेम्पलेट लागू करता है और परिणामी UIElement और उसके बच्चे तत्व, यदि कोई हो, प्रदर्शित होते हैं।
    • यदि सामग्री के प्रकार से जुड़े डेटा टेम्पलेट हैं, तो सामग्री प्रदाता उस सामग्री टेम्पलेट पर डेटा टेम्पलेट लागू करता है और परिणामी UIElement और उसके बच्चे तत्व, यदि कोई हो, प्रदर्शित होते हैं।
    • यदि सामग्री एक UIElement ऑब्जेक्ट है, तो UIElement प्रदर्शित होता है। यदि UIElement में पहले से ही एक अभिभावक है, तो एक अपवाद होता है।
    • यदि कोई टाइप कनवर्टर है जो सामग्री के प्रकार को UIElement में परिवर्तित करता है, तो ContentPresenter उस प्रकार कनवर्टर का उपयोग करता है और परिणामी UIElement प्रदर्शित होता है।
    • यदि कोई टाइप कनवर्टर है जो सामग्री के प्रकार को स्ट्रिंग में परिवर्तित करता है, तो सामग्री प्रदाता उस टाइप कनवर्टर का उपयोग करता है और उस स्ट्रिंग को रखने के लिए टेक्स्टब्लॉक बनाता है। टेक्स्टब्लॉक प्रदर्शित होता है।
    • यदि सामग्री एक एक्सएमएलएलमेंट है, तो इनरटेक्स्ट प्रॉपर्टी का मान टेक्स्टब्लॉक में प्रदर्शित होता है।
    • सामग्री प्रदाता सामग्री पर ToString विधि को कॉल करता है और ToString द्वारा लौटाई गई स्ट्रिंग को रखने के लिए टेक्स्टब्लॉक बनाता है। टेक्स्टब्लॉक प्रदर्शित होता है।

    TextBlock वर्ग के मामले में, आप या तो Text संपत्ति तय करने का विकल्प है, या Inlines गुण सेट। Text सेट करना बस पाठ प्रस्तुत करेगा। Inlines सेट करना (यदि आप xaml टैग के शरीर के अंदर सामग्री डालते हैं तो डिफ़ॉल्ट है) आपको अपना टेक्स्ट प्रारूपित करने की अनुमति देता है। उदाहरण के लिए, आप एक Run का उपयोग FontWeightBold पर कर सकते हैं ताकि एक वाक्य के भीतर बोल्ड एक निश्चित शब्द या वाक्यांश बनाया जा सके। आप एक नई लाइन डालने के लिए LineBreak का उपयोग कर सकते हैं। टेक्स्ट में कस्टम यूआई तत्व डालने के लिए आप InlineUIContainer का भी उपयोग कर सकते हैं। Inline कक्षा से प्राप्त कुछ भी इस संग्रह में जा सकता है।

    TextBlock स्वरूपित पाठ के सरल बिट्स के लिए है। यदि आप और भी शक्तिशाली दस्तावेज़ शैली सुविधाओं को चाहते हैं, तो आप FlowDocument पर देख सकते हैं, जिसका उपयोग RichTextBox, FlowDocumentScrollViewer और FlowDocumentReader जैसे नियंत्रणों द्वारा किया जाता है।

    <TextBlock Text="something" /> और <TextBlock><TextBlock.Text>something</TextBlock.Text></TextBlock> के बीच अंतर, वास्तव में कोई अंतर नहीं है। वे केवल दो अलग-अलग तरीके हैं जिनके द्वारा आप xaml फ़ाइल में किसी चीज़ पर गुण सेट कर सकते हैं। दूसरा संस्करण आमतौर पर तब उपयोग किया जाता है जब आपको सेटटर के अंदर अतिरिक्त तत्वों को परिभाषित करने की आवश्यकता होती है।

    4

    पर एक संक्षिप्त शब्द 'संपत्ति तत्वों'

    यह जेवियर महान जवाब पर सिर्फ एक अतिरिक्त टिप्पणी है। क्योंकि Text संपत्ति प्रकार String जो एक सरल प्रकार है जो सीधे Text="something" की तरह सेट किया जा सकता है की है

    <TextBlock Text="something" /> 
    

    और

    <TextBlock><TextBlock.Text>something</TextBlock.Text></TextBlock> 
    

    Thats:

    वास्तव में वहाँ के बीच ज्यादा अंतर नहीं है।

    उपरोक्त उदाहरण में बाद का वाक्यविन्यास 'संपत्ति तत्व' कहा जाता है। आमतौर पर किसी तत्व के गुण को जटिल प्रकार में सेट करते समय इसका उपयोग किया जाता है।

    उदाहरण:

    <Button> 
        <Button.Content> 
        <Rectangle Height="20", Width="20", Fill="Black"/> 
        </Button.Content> 
    </Button> 
    

    इस उदाहरण में, आप propably सीधे Button.Content का उपयोग किए बिना 'आयत' सेट कर सकते हैं, लेकिन अन्य उदाहरण के लिए वाक्यविन्यास जटिल प्रकार की एक विशेषता सेट करने के लिए इस्तेमाल किया जा सकता।

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