2009-09-09 14 views
9

मैं इन पंक्तियों के साथ कुछ के लिए देख रहा हूँ:आप WPF में टेक्स्टब्लॉक की सजा के बीच में बाध्यकारी कैसे डालते हैं?

<TextBlock 
    Grid.Column="1" 
    Text="Welcome, {Binding UserName}!" /> 

निश्चित रूप से हो जाएगा ताकि वास्तव में पाठ प्रदर्शित "{उपयोगकर्ता नाम बाइंडिंग}" उपयोगकर्ता के बजाय यह डिकोड, लेकिन मैं जानता हूँ कि आप इस तरह से कुछ कर सकते हैं एएसपी.नेट के साथ, इसलिए मुझे आशा है कि इसे WPF में काम करने के लिए एक तरीका है।

मैं पहले से ही पता है कि मैं एक IValueConverter इस्तेमाल कर सकते हैं हूँ ... मैं कुछ मैं विशुद्ध रूप से मार्कअप में क्या कर सकते हैं यदि संभव हो तो के लिए देख रहा हूँ।

संपादित करें:

@Matt हैमिल्टन की सबसे उत्कृष्ट समाधान के आधार पर मैंने लिफाफा धक्का और एक MultiBinding का उपयोग कर एक ही TextBlock में दो मानों बाध्य करने का प्रयास किया। एक आकर्षण की तरह काम करता है:

<TextBlock 
    Style="{StaticResource TextBlock_ValueStyle}" 
    Grid.Column="1"> 
    <TextBlock.Text> 
     <MultiBinding 
      StringFormat="{}Attempts: {0:G} of {1:G}"> 
      <Binding 
       Path="AttemptNumber" /> 
      <Binding 
       Path="AttemptCount" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

यह पैदा करता है: Attempts: 1 of 4 (यह मानते हुए AttemptNumber = 1 और AttemptCount = 4)।

http://msdn.microsoft.com/en-us/library/fbxft59x.aspx

उत्तर

15

आप .NET 3.5 SP1 में StringFormat बंधन संपत्ति का उपयोग कर सकते हैं।

अद्यतन हाँ, एक से अधिक मान भी समर्थित हैं:

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="Welcome, {0} {1}!"> 
      <Binding Path="FirstName" /> 
      <Binding Path="LastName" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 
+0

व्ही, यह अच्छा है। ऑर्डरिंग अजीब है, हालांकि, यह सामान्य [स्ट्रिंग] :: प्रारूप के विपरीत बिल्कुल विपरीत है। – Joey

+0

सुंदर! यह मुझे एक और सवाल पर ले जाता है, यद्यपि: क्या यह कई बाध्य मूल्यों के लिए संभव है या आप एक तक सीमित हैं? धन्यवाद। – devuxer

+0

ने अपना खुद का प्रश्न उत्तर दिया (मेरा संपादन देखें)। – devuxer

0

अब तक मैं एक समाधान के बारे में पता नहीं है जो ठीक उसी तरह के रूप में यह संभव बनाता है:

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

<StackPanel Orientation="Horizontal"> 
    <TextBlock Text="Welcome, "/> 
    <TextBlock Text="{Binding UserName}"/> 
    <TextBlock Text="!"/> 
</StackPanel> 

यह मैं अब तक क्या इस्तेमाल किया और जब बोझिल टाइप करने के लिए यह सबसे आसान समाधान हो रहा है है। लेकिन जैसे ही आपको अंतर्राष्ट्रीयकरण की आवश्यकता होती है, यह स्पष्ट कारणों से नहीं है।

<TextBlock Text="{Binding UserName,StringFormat='Welcome, \{0\}!'}" /> 

ध्यान दें कि आपको एक बैकस्लैश वाले स्ट्रिंग प्रारूप में घुंघराले ब्रेसिज़ से बचने के लिए की जरूरत है:

+0

मैं एक साथ स्ट्रिंग के लिए एक 'StackPanel' का उपयोग किया है विशेषता और मान के जोड़े से पहले (जैसे," स्थिति: सफल "), लेकिन मैं स्ट्रिंग एक वाक्य की वजह से एक साथ अलग-अलग हिस्सों के लिए इसका इस्तेमाल करने के लिए एक छोटे से सावधान था मैंने सोचा था कि प्राकृतिक टेक्स्ट स्पेसिंग संरक्षित नहीं किया जा सकता है (यानी, आप एक ही 'एक अच्छा समाधान TextBlock'। इस निकलती है तो करने के लिए एक समस्या नहीं हो, हालांकि, यह है की शब्दों के बीच से' TextBlocks' के बीच बड़ा ब्रेक होगा । – devuxer

+0

अब तक मेरे पास कोई अतिरिक्त जगह देखा। लेकिन सबसे अधिक संभावना कर्निंग इच्छा स्वत: संयुक्ताक्षर, आदि अनिवार्य रूप से आप विभिन्न रन में पाठ तोड़ने के लिए और मैं उन भर में उन्नत टाइपोग्राफी काम करता है शक है। लेकिन कुछ परियोजनाओं के लिए i18n हिस्सा है के रूप में काम नहीं करेगा एक बहुत गंभीर एक और मैं जहां भी संभव हो संगत तारों और चर या गैर-स्थितित्मक प्रारूप तारों का उपयोग करने से बचता हूं। कभी-कभी एक त्वरित और गंदे समाधान इस तरह जीवित रहता है, हालांकि :-) – Joey

0

इस पुस्तकालय "WPFix" पर एक नज़र डालें। यह उपयोगकर्ता को XAML में लैम्ब्डा अभिव्यक्ति लिखने की अनुमति देता है। मैंने उत्पादन कोड में इसका उपयोग नहीं किया, केवल डेमो कोड में। मैं एक फॉर्म की चौड़ाई लेने में सक्षम था, इसे दो से विभाजित करता था, और मान को नियंत्रण में बांधता था। आम तौर पर, जैसा कि आप वर्णन करते हैं, आपको कनवर्टर क्लास बनाना होगा।

http://www.fikrimvar.net/lestirelim/?p=15

1

यह पाठ मिश्रण सबसे आसान तरीका है और

<TextBlock>Welcome, <TextBlock Text="{Binding UserName}"/>!</TextBlock> 

आप स्टाइल बटन या करने के लिए अन्य नियंत्रण इनलाइन नियंत्रित कर सकते हैं: इस पुस्तकालय बात आप देख रहे हैं हो सकता है।

1

यह कर चलाता उपयोग कर रहा है के लिए सबसे अच्छा तरीका ...

<TextBlock> 
    <Run Text="Welcome"/> 
    <Run Text="{Binding UserName}"/> 
    <Run Text="!"/> 
</TextBlock> 
संबंधित मुद्दे