स्ट्रिंग विशेषता में न्यूलाइन


283

जब यह एक विशेषता के रूप में सेट किया जा रहा हो तो मैं टेक्स्ट में एक लाइन ब्रेक कैसे जोड़ सकता हूं:

<TextBlock Text="Stuff on line1 \n Stuff on line2" />

इसे विस्फोटित प्रारूप में तोड़ना मेरी विशेष स्थिति का विकल्प नहीं है। निम्नलिखित अनुकरण करने के लिए मुझे किसी चीज़ की आवश्यकता है:

<TextBlock>
  <TextBlock.Text>
    Stuff on line1 <LineBreak/>
    Stuff on line2
  </TextBlock.Text>
<TextBlock/>

जवाबों:


553
<TextBlock Text="Stuff on line1&#x0a;Stuff on line 2"/>

आप किसी शाब्दिक का प्रतिनिधित्व करने के लिए किसी भी षोडश आधारीय रूप से एन्कोडेड मान का उपयोग कर सकते हैं। इस मामले में, मैंने लाइन फीड (चार 10) का उपयोग किया। यदि आप "क्लासिक" करना चाहते हैं vbCrLf, तो आप उपयोग कर सकते हैं&#x0d;&#x0a;

वैसे, वाक्यविन्यास पर ध्यान दें: यह एम्परसेंड, एक पाउंड, अक्षर x , फिर आपके द्वारा इच्छित वर्ण का हेक्स मान और फिर अंत में एक अर्ध-बृहदान्त्र है।

ALSO: पूर्णता के लिए, आप एक ऐसे टेक्स्ट से बंध सकते हैं जिसमें पहले से ही लाइन फीड है, जो आपके कोड में एक स्थिरांक की तरह है, या रनटाइम में निर्मित एक चर है।


14
जाहिरा तौर पर यह <TextBlock.Text> </ TextBlock.Text> टैग के भीतर काम नहीं करता है।
tcables

45
आज तक, मेरे पास इस उत्तर पर 34 अपवोट्स हैं, और मुझे अभी भी वापस आना और जांचना होगा क्योंकि वाक्यविन्यास बहुत पुरातन है।
बॉब किंग

3
पूर्ण रूप से। मैंने इसे बुकमार्क कर लिया है। मुझे हर समय इसकी जांच करनी है।
MojoFilter

4
'आर्कटिक' ==> 'आर्कन' :-)
विल डीन

5
यहां तक कि एक बाध्यकारी पैरामीटर की तरह एक बैकस्लैश जोड़ने के अंदर काम करता है: ConverterParameter = 'टेस्ट \ & # x0a किया है, पाठ'
स्वेन

72

हो सकता है कि आप स्रोत XAML में व्हॉट्सएप को संरक्षित करने के लिए विशेषता xml: space = "संरक्षित" का उपयोग कर सकते हैं

<TextBlock xml:space="preserve">
Stuff on line 1
Stuff on line 2
</TextBlock>

8
आप xml को भी हटा सकते हैं: space = "संरक्षित करें" और लाइनों के बीच <LineBreak /> जोड़ें
उपयोगी atBee

5
यह ध्यान दिया जाना चाहिए (कुछ साल बाद) वह xml:space="preserve"इंडेंट स्पेस भी रखेगा, जो आमतौर पर एक्सएएमएल में मौजूद होते हैं। इस प्रकार, <LineBreak />जैसा कि ऊपर बताया गया है, एक स्पष्ट समाधान है।
ज़ीउस

धन्यवाद! यह समाधान मेरे XAML- आधारित क्रमांकन कोड पर बहुत अच्छी तरह से फिट बैठता है।
सेराफिम

ओह यह सही काम किया। इसने मुझे बहुत सारे बॉयलर प्लेट कोड बचाए। धन्यवाद
iam.Carrot

57

जब आपको इसे एक स्ट्रिंग में करने की आवश्यकता होती है (उदाहरण के लिए: अपने संसाधनों में) आपको उपयोग करने की आवश्यकता होती है xml:space="preserve" और एम्परसेंड वर्ण कोड:

<System:String x:Key="TwoLiner" xml:space="preserve">First line&#10;Second line</System:String>

या पाठ में शाब्दिक नई रूपरेखा:

<System:String x:Key="TwoLiner" xml:space="preserve">First line 
Second line</System:String>

चेतावनी: यदि आप दूसरे उदाहरण की तरह कोड लिखते हैं, तो आपने अपने ऑपरेटिंग सिस्टम और / या टेक्स्ट एडिटर के उपयोग के आधार पर या तो एक नई लाइन, या एक गाड़ी वापसी और नई लाइन डाली है । उदाहरण के लिए, यदि आप इसे लिखते हैं और इसे linux सिस्टम से प्राप्त करने के लिए प्रतिबद्ध करते हैं, तो सब कुछ ठीक लग सकता है - लेकिन अगर कोई इसे विंडोज़ पर क्लोन करता है, तो git आपकी लाइन एंडिंग को बदल देगा \r\nऔर आपके स्ट्रिंग के लिए ... दुनिया को तोड़ सकता है।

बस इसके बारे में पता होना चाहिए जब आप व्हॉट्सएप का संरक्षण कर रहे हों। यदि आप ऐसा कुछ लिखते हैं:

<System:String x:Key="TwoLiner" xml:space="preserve">
First line 
Second line 
</System:String>

आपने वास्तव में चार लाइन ब्रेक जोड़े हैं, संभवतः चार कैरिज-रिटर्न और संभावित रूप से सफेद स्थान को पीछे छोड़ते हुए जो अदृश्य है ...


10
BTW, आप अभी भी xml:space="preserve"विशेषता को लागू कर सकते ResourceDictionaryहैं, ताकि आपको इसे प्रत्येक संसाधन स्ट्रिंग पर लागू करने की आवश्यकता न हो।
ओसोडो

1
बिना एम्परसेंड भी काम करता है। कुछ इस तरह से: <System:String x:Key="TwoLiner" xml:space="preserve">First line Second line</System:String> (पहली पंक्ति और दूसरी पंक्ति के बीच एक पंक्ति विराम के साथ)
भाग '

1
काश मैं आपको +10 के लिए दे सकताxml:space="preserve"
टिमोथी

1
@trooper मैंने केवल संपादन किया और इसे Jaykul / mod के अनुमोदन तक छोड़ दिया गया। और जयकुल ने आगे भी मामूली विवरणों को स्पष्ट किया है (क्योंकि मेरे संपादन में वांछित आउटपुट बिल्कुल वैसा नहीं दिया गया जैसा कि चाहते थे)। कुल मिलाकर मैं कहूंगा कि यह इंटरैक्शन मेरे खुद के पोस्ट करने के बजाय बेहतर उत्तर बनाने में मदद करता है।
एंथनी लुसार्दी

21

आपको <TextBlock.Text>निम्नलिखित के रूप में केवल हटाने और अपनी सामग्री जोड़ने की आवश्यकता है :

    <Grid Margin="20">
        <TextBlock TextWrapping="Wrap" TextAlignment="Justify" FontSize="17">
        <Bold FontFamily="Segoe UI Light" FontSize="70">I.R. Iran</Bold><LineBreak/>
        <Span FontSize="35">I</Span>ran or Persia, officially the <Italic>Islamic Republic of Iran</Italic>, 
        is a country in Western Asia. The country is bordered on the 
        north by Armenia, Azerbaijan and Turkmenistan, with Kazakhstan and Russia 
        to the north across the Caspian Sea.<LineBreak/>
        <Span FontSize="10">For more information about Iran see <Hyperlink NavigateUri="http://en.WikiPedia.org/wiki/Iran">WikiPedia</Hyperlink></Span>
            <LineBreak/>
            <LineBreak/>
            <Span FontSize="12">
                <Span>Is this page helpful?</Span>
                <Button Content="No"/>
                <Button Content="Yes"/>
            </Span>
    </TextBlock>
    </Grid>

यहां छवि विवरण दर्ज करें


और सवाल यह था कि " मैं एक पंक्ति विराम को पाठ में कैसे जोड़ सकता हूं जब इसे एक विशेषता के रूप में सेट किया जा रहा है ", विशेषता, तत्व नहीं।
मिनट

15

ध्यान दें कि ऐसा करने के लिए आपको इसे पाठ विशेषता में करने की आवश्यकता है, जैसे आप सामग्री का उपयोग नहीं कर सकते

<TextBlock>Stuff on line1&#x0a;Stuff on line 2</TextBlock>

12

शायद कोई पसंद करता है

<TextBlock Text="{Binding StringFormat='Stuff on line1{0}Stuff on line2{0}Stuff on line3',
                          Source={x:Static s:Environment.NewLine}}" />

के साथ xmlns:s="clr-namespace:System;assembly=mscorlib"


हालाँकि & # x0a जोड़ना; XAML से काम करने लगता है, यह कोड से नहीं है। यह एक करता है।
FDF

11

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

मेरी TextBlock.Textसंपत्ति एक के अंदर थीToolTipService.ToolTip तत्व के और यह एक ऑब्जेक्ट की संपत्ति के लिए डेटाबाउंड था, जिसका डेटा SQL संग्रहित प्रक्रिया से खींचा जा रहा था। अब संग्रहीत कार्यविधि के भीतर इस विशेष संपत्ति का डेटा SQL फ़ंक्शन से खींचा जा रहा था।

चूंकि मेरे लिए कुछ भी काम नहीं किया था, मैंने अपनी खोज छोड़ दी और नीचे कन्वर्टर क्लास बनाई:

public class NewLineConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var s = string.Empty;

        if (value.IsNotNull())
        {
            s = value.ToString();

            if (s.Contains("\\r\\n"))
                s = s.Replace("\\r\\n", Environment.NewLine);

            if (s.Contains("\\n"))
                s = s.Replace("\\n", Environment.NewLine);

            if (s.Contains("&#x0a;&#x0d;"))
                s = s.Replace("&#x0a;&#x0d;", Environment.NewLine);

            if (s.Contains("&#x0a;"))
                s = s.Replace("&#x0a;", Environment.NewLine);

            if (s.Contains("&#x0d;"))
                s = s.Replace("&#x0d;", Environment.NewLine);

            if (s.Contains("&#10;&#13;"))
                s = s.Replace("&#10;&#13;", Environment.NewLine);

            if (s.Contains("&#10;"))
                s = s.Replace("&#10;", Environment.NewLine);

            if (s.Contains("&#13;"))
                s = s.Replace("&#13;", Environment.NewLine);

            if (s.Contains("<br />"))
                s = s.Replace("<br />", Environment.NewLine);

            if (s.Contains("<LineBreak />"))
                s = s.Replace("<LineBreak />", Environment.NewLine);
        }

        return s;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

मैंने @ dparker के उत्तरEnivornment.NewLine से विधि का उपयोग करने के लिए समाप्त कर दिया । मैंने कन्वर्टर को निर्देश दिया कि किसी न्यूलाइन के किसी भी संभावित टेक्स्टुअल प्रतिनिधित्व को देखें और उसे बदलेंEnvironment.NewLine

यह काम किया!

हालाँकि, मैं अभी भी चिंतित था कि क्यों अन्य तरीकों में से किसी ने डेटाबाउंड गुणों के साथ काम नहीं किया।

मैंने @ BobKing के स्वीकृत उत्तर पर एक टिप्पणी छोड़ दी :

@BusKing - यह ToolTipService.ToolTip में काम करने के लिए प्रतीत नहीं होता है जब किसी क्षेत्र में बाइंडिंग होती है जिसमें लाइन एसक्यूएल स्पोक से एम्बेडेड होती है।

उसने उत्तर दिया:

@CodeMaverick यदि आप नई लाइनों के साथ पाठ के लिए बाध्य कर रहे हैं, तो उन्हें संभवतः वास्तविक 10 मान (या 13) होना चाहिए न कि XML प्रहरी। यह केवल यदि आप XAML फ़ाइलों में शाब्दिक नई पंक्तियाँ लिखना चाहते हैं।

एक प्रकाश बल्ब बंद हो गया!

मैं अपने एसक्यूएल फ़ंक्शन में गया, मेरी नई सूचियों के पाठात्मक प्रतिस्थापनों के साथ ...

CHAR( 13 ) + CHAR( 10 )

... मेरे TextBlock.Textबंधन से कनवर्टर को हटा दिया , और बस ऐसे ही ... यह काम किया!


9

मुझे यह मददगार लगा, लेकिन XAML में "सामग्री = ..." टैग में जोड़ते समय कुछ त्रुटियों में भाग गया।

मेरे पास सामग्री में कई पंक्तियां थीं, और बाद में पता चला कि सामग्री ने सफेद रिक्त स्थान रखे हुए थे, हालांकि मैंने यह निर्दिष्ट नहीं किया था। इस तरह के आसपास पाने के लिए और इसे व्हाट्सएप को "अनदेखा" करने के लिए, मैंने इसे इस तरह से लागू किया।

<ToolTip Width="200" Style="{StaticResource ToolTip}" 
         Content="'Text Line 1' 
                   &#x0a;&#x0d;'Text Line 2' 
                   &#x0a;&#x0d;'Text Line 3'"/>

मनाइए कि यह किसी और के लिए सहायक हो।

(आउटपुट में प्रत्येक के बीच में एक खाली लाइन के साथ तीन टेक्स्ट लाइनें हैं।)


आप बेहतर कोशिश कर बंद हो सकता है <ToolTip> <ToolTip.Content> <TextBlock पाठ = '.....' /> </ ToolTip.Content> </ ToolTip>
Simon_Weaver

5

मुझे लगता है कि यह पुराने सवाल पर है लेकिन बस इसे जोड़ना चाहता था

Environment.NewLine

कोड के माध्यम से ऐसा करने पर भी काम करता है।


4
<TextBlock>
    Stuff on line1 <LineBreak/>
    Stuff on line2
</TextBlock>

ऐसा नहीं है कि यह जानना महत्वपूर्ण है, लेकिन आप TextBlock टैग के बीच जो निर्दिष्ट करते हैं, उसे इनलाइन सामग्री कहा जाता है और TextBlock.Inlines संपत्ति में जाता है, जो कि एक InlineCollection है और इसमें टाइप इनलाइन के आइटम हैं। इनलाइन के उपवर्ग दूसरों के बीच में रन और लाइनब्रेक हैं। देखें TextBlock.Inlines


3

इसके साथ काम नहीं करता है

<TextBlock><TextBlock.Text>NO USING ABOVE TECHNIQUE HERE</TextBlock.Text>

कोई बड़ी बात नहीं, बस उपयोग की जरूरत है

<TextBlock Text="Cool &#x0a;Newline trick" />

बजाय।



-1

समाधान के पीछे कोड

private void Button1_Click(object sender, RoutedEventArgs e)
{
    System.Text.StringBuilder myStringBuilder = new System.Text.StringBuilder();
    myStringBuilder.Append("Orange").AppendLine();
    myStringBuilder.Append("").AppendLine();
    myStringBuilder.Append("Apple").AppendLine();
    myStringBuilder.Append("Banana").AppendLine();
    myStringBuilder.Append("").AppendLine();
    myStringBuilder.Append("Plum").AppendLine();
    TextBox1.Text = myStringBuilder.ToString();
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.