2009-12-08 7 views
23

के साथ एक मल्टीबाइंडिंग पर TabItem.Header.Text सेट करें। मैं टैबलेटम को कैसे सेट करूं। कुछ फ़ील्ड से ली गई बाइंडिंग के लिए हैडर, प्रत्येक बाध्यकारी एक अलग आकार में दिखाया गया है, सभी मूल हेडर टेक्स्ट के स्थान पर ; डिफ़ॉल्ट शैली और शीर्षलेख के व्यवहार को ओवरराइड किए बिना - मुझे केवल पाठ की आवश्यकता है।TabControl.ItemTemplate: StingFormat

मैंने अपना टेम्पलेट सेट करने का प्रयास किया लेकिन फिर यह एक आयताकार बनाता है जिसमें आंतरिक नियंत्रण होता है, और यह आयत उपयोगकर्ता क्लिक के लिए उत्तरदायी नहीं है, और नियंत्रण-शैली भी है, मैं चाहता हूं कि यह नियंत्रण अदृश्य हो, केवल इसकी पाठ दिखाई देना चाहिए।

मैं निम्नलिखित की कोशिश की है:

<TabControl ItemsSource="{Binding}"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TabItem> 
       <TabItem.Header> 
        <MultiBinding StringFormat="{}{0}-{1}"> 
         <Binding Path="Title"/> 
         <Binding Path="Category.Title"/> 
        </MultiBinding> 
       </TabItem.Header> 
       <TabItem.Content> 
        <TextBlock> 
         Here is what is gonna be in the TabItem - not header 
        </TextBlock> 
       </TabItem.Content> 
      </TabItem> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
</TabControl> 

लेकिन यह कुछ भी नहीं दिखाता है।

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

तो, मेरे प्रश्न को संक्षेप में सारांशित करने के लिए, मैं TabItem.Header.Text को स्ट्रिंगफॉर्मैट के साथ एक मल्टीबाइंडिंग पर सेट करना चाहता हूं।

+3

मैंने इस प्रश्न के लगभग घंटों पहले ही जवाब दिया था। लेकिन ऐसा लगता है कि सवाल हटा दिया गया था और दोबारा पोस्ट किया गया था? – Dabblernl

+0

आपने इस प्रश्न के पिछले संस्करण को क्यों हटाया? आप जो भी पूछ रहे हैं उसे न बदलें, और उस प्रभाव पर टिप्पणियां क्यों न दें, फिर आप जवाब दें कि वे निशान को याद कर चुके हैं, कविता कचरा काम करते हैं? –

उत्तर

61

टैबकंट्रोल में एक सामग्री टेम्पलेट संपत्ति के साथ-साथ आइटम टेम्पलेट भी है जो इसे आइटम नियंत्रण से प्राप्त करता है। यह ContentTemplate का उपयोग सामग्री क्षेत्र में जो दिखा रहा है उसे अलग करने के लिए करता है जबकि आइटम टेम्पलेट जो शीर्षलेख के लिए टेम्पलेट को परिभाषित करता है। इसके अतिरिक्त, आपके आइटम स्रोत से प्रत्येक आइटम स्वचालित रूप से TabItem में लपेटा जाएगा; इसे आइटम टेम्पलेट में फिर से बनाया जाने की आवश्यकता नहीं है, क्योंकि आप हेडर के अंदर टैबिटेम लगाने की कोशिश करेंगे जैसा कि आप देख रहे हैं।

आइटम टेम्पलेट के अंदर एक टैबइटेम को फिर से बनाने के बजाय, अपनी सामग्री को परिभाषित करने के लिए अपनी शीर्षलेख सामग्री को परिभाषित करने के लिए ItemTemplate का उपयोग करें और ContentTemplate का उपयोग करें।

<TabControl ItemsSource="{Binding}"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <TextBlock.Text> 
        <MultiBinding StringFormat="{}{0}--{1}"> 
         <Binding Path="Title" /> 
         <Binding Path="Category.Title" /> 
        </MultiBinding> 
       </TextBlock.Text> 
      </TextBlock> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding MyContent}" /> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

आपके पहले पैराग्राफ में आपने हेडर के बाध्य हिस्सों पर विभिन्न आकार सेट करना चाहते हैं। यदि आप ऐसा करना चाहते हैं, तो आप उपरोक्त किए गए पाठ को सेट करने के लिए एकल बाध्यकारी या मल्टीबाइंडिंग का उपयोग नहीं कर पाएंगे। इसके बजाय आप प्रत्येक के लिए अलग स्वरूपण के साथ इसे प्राप्त करने के लिए टेक्स्टब्लॉक घोंसला कर सकते हैं।

<TabControl.ItemTemplate> 
    <DataTemplate> 
     <TextBlock> 
      <TextBlock Text="{Binding Title}" 
         FontSize="12" /> 
      <Run Text="--" /> 
      <TextBlock Text="{Binding Category.Title}" 
         FontSize="10" /> 
     </TextBlock> 
    </DataTemplate> 
</TabControl.ItemTemplate> 
+0

इनके लिए स्टाइल टार्गेट टाइप क्या हैं? मुझे पता है कि TabItem बटन के लिए है, लेकिन पेज के बारे में क्या? – Patrick

+0

यह वास्तव में निपटने के लिए एक बहुत ही मुश्किल बात थी। +1 –