কীভাবে একটি ডাব্লুপিএফ টেক্সটব্লক নিয়ন্ত্রণে একটি নতুন লাইন স্থাপন করবেন?


101

আমি একটি এক্সএমএল ফাইল থেকে পাঠ্য আনছি এবং আমি কিছু নতুন লাইন সন্নিবেশ করতে চাই যা পাঠ্যরূপ দ্বারা নতুন লাইন হিসাবে রেন্ডার করে ব্যাখ্যা করা হয়।

আমি চেষ্টা করেছিলাম:

<data>Foo bar baz \n baz bar</data>

তবে ডেটা এখনও নতুন লাইন ছাড়াই প্রদর্শিত হয়। আমি সম্পত্তির মাধ্যমে সি # এর <data>মাধ্যমে সামগ্রীগুলি সেট করেছি .Text

জিএমআইতে নতুন লাইনটি রেন্ডার করার জন্য এক্সএমএলটিতে আমার কী রাখা দরকার?

আমি এক্সএএমএল-তে ম্যানুয়ালি পাঠ্যটি সেট করার মতো কিছু চেষ্টা করেছি:

<TextBlock Margin="0 15 0 0" Width="600">
There &#10;
is a new line.
</TextBlock>

এবং এনকোডেড চরিত্রটি জিইউআইতে উপস্থিত না হওয়ার সাথে সাথে এটি আমাকে একটি নতুন লাইন দেয় না।


আপনি "উদ্ধৃতি" এ প্রত্যাবর্তন চরিত্র মোড়কে চেষ্টা করেছি <তথ্য> foo বিন্যাস বার বায "\ N" বায বার </ ডাটা>
MethodMan

@ ডিজেক্র্যাজ: উদ্ধৃতিগুলি কিছুই করে না, আর আর এনও একসাথে করে না। : এস
একমাত্র বলিভিয়ান এখানে

@ বালামবালাম: এটি এক নয়, সেই প্রশ্নটি পাঠ্য বৈশিষ্ট্য সম্পর্কে স্পষ্টতা।
এইচবি

আমি দেখতে পাচ্ছি আমি পুরোপুরি বুঝতে পেরেছি কেন এখন "" কেন কাজ করবে না .. আমি ধরে নিচ্ছি <লাইনব্রেক> তখন আক্ষরিক / কী শব্দের মতো হবে। আমার ভুল .. দুর্দান্ত উত্তর এইচবি
মেথডম্যান

ড্যান ভোগেল একটি আপ টু ডেট ওয়ার্কিং সলিউশন তৈরি করেছেন। ডাব্লুপিএফ \ r \ n \\ r \\ n তে ব্যাখ্যা করে।
জর্জি আলেক্স

উত্তর:


173

আপনি ডেটাতে একটি নতুন লাইন রাখার চেষ্টা করতে পারেন:

<data>Foo bar baz 
 baz bar</data>

যদি এটি কাজ না করে তবে আপনাকে ম্যানুয়ালি স্ট্রিংটি বিশ্লেষণের প্রয়োজন হতে পারে।

আপনার যদি সরাসরি এক্সএএমএল প্রয়োজন হয় তবে এটি সহজ:

<TextBlock>
    Lorem <LineBreak/>
    Ipsum
</TextBlock>

না, এটি পাশাপাশি কিছু করে না। এমনকি আমি টেক্সটব্লকের এক্সএএমএল-এর ভিতরে থাকা লিখিত সামগ্রীগুলি নতুন লাইন হিসাবে এন্টার প্রেসগুলি দিয়ে কপি করেছি এবং এটি এখনও একবারে এটি প্রদর্শিত হয়।
শুধুমাত্র বলিভিয়ান এখানে

3
@ সেরজিওটিপিয়া: কিছু ডেটা ফাইল এবং এক্সএএমএল-তে বিরতি থাকার মধ্যে পার্থক্য রয়েছে, এক্সএএমএল পার্সার হোয়াইটস্পেস উপেক্ষা করে, তবে আপনি যদি উদাহরণস্বরূপ, XmlSerializerব্রেকগুলি ব্যবহার করে কিছু এক্সএমএলকে deserialize করেন তবে তা বজায় রাখা হবে। এক্সএমেলে আপনার দরকার <LineBreak/>
এইচবি

নতুন লাইনটি সরাসরি ডেটাতে রাখুন ... অবশ্যই! এখানে আমি time n, <লাইনব্রেক /> এবং অনেকগুলি এইচটিএমএল কোড ব্যবহার করেই কিছু সময় ব্যয় করেছি no আমার প্রথমে সহজ পদ্ধতির চেষ্টা করা উচিত ছিল।
thehelix

65

সম্পূর্ণতার জন্য: আপনি এটিও করতে পারেন:

 <TextBlock Text="Line1&#x0a;Line 2"/>

x0A হ'ল পাল্টানো হেক্সাডেসিমাল লাইন ফিড। সমান \ n


2
দৃশ্যে আবদ্ধ হওয়ার ক্ষেত্রে যেমন দরকারী: - <টেক্সটব্লক> <টেক্সট ব্লক। পাঠ্য> <মাল্টিবাইন্ডিং স্ট্রিংফর্ম্যাট = "{} নাম: {0} & # x0a; কোড: {1}"> <বাঁধাই পথ = "নাম" / > <বাইন্ডিং পাথ = "কোড" /> </ मल्टीবাইন্ডিং </ টেক্সটব্লক। পাঠ্য> << টেক্সট ব্লক>
রাজীবডোটনেট

3
এটি সেরা উত্তর
অরিলিও আন্তোনিও

আমি এই লিঙ্কটি যুক্ত করব: উত্তরের একটি ব্যাখ্যা stackoverflow.com/questions/9021649/…
I.Step

22

আপনি বাঁধাই ব্যবহার করতে পারেন

<TextBlock Text="{Binding MyText}"/>

এবং এই মত MyText সেট করুন:

Public string MyText
{
    get{return string.Format("My Text \n Your Text");}
}

9
আপনার স্ট্রিংও লাগবে না For ফর্ম্যাট ()। "আমার পাঠ্য \ n আপনার পাঠ্য" ফেরত দিন; ঠিক কাজ করে।
জোডম্যান

18

আপনার অবশ্যই ব্যবহার করা উচিত

 < SomeObject xml:space="preserve" > once upon a time ...
      this line will be below the first one < /SomeObject>

বা আপনি যদি পছন্দ করেন:

 <SomeObject xml:space="preserve" />  once upon a time... &#10; this line below < / SomeObject>

সতর্কতা অবলম্বন করুন: যদি আপনি উভয়ই & 10 ব্যবহার করেন এবং আপনি আপনার পাঠ্যের পরবর্তী লাইনে যান তবে আপনার কাছে দুটি খালি লাইন থাকবে।

বিস্তারিত জানার জন্য এখানে: http://msdn.microsoft.com


12

যদিও এটি একটি পুরানো প্রশ্ন, আমি কেবল সমস্যার মুখোমুখি হয়েছি এবং প্রদত্ত উত্তরগুলির থেকে পৃথকভাবে সমাধান করেছি। এটি অন্যের পক্ষে সহায়ক হতে পারে।

আমি লক্ষ্য করেছি যে আমার এক্সএমএল ফাইলগুলি দেখতে দেখতে:

<tag>
 <subTag>content with newline.\r\nto display</subTag>
</tag>

এটি যখন আমার সি # কোডে পড়েছিল তখন স্ট্রিংয়ের ডাবল ব্যাকস্ল্যাশ ছিল।

\\r\\n

এটি ঠিক করতে আমি অতিরিক্ত ব্যাকস্ল্যাশ ফালাটি করতে একটি ভ্যালু কনভার্টার লিখেছিলাম।

public class XmlStringConverter : IValueConverter
{
    public object Convert(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        string valueAsString = value as string;
        if (string.IsNullOrEmpty(valueAsString))
        {
            return value;
        }

        valueAsString = valueAsString.Replace("\\r\\n", "\r\n");
        return valueAsString;
    }

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

টেক্সটব্লকটিতে এক্সএএমএল-এ যুক্ত করা TextWrapping="Wrap"(এবং এটি AcceptsReturn="True"যদি একটি টেক্সটবক্সও ছিল) যুক্ত হওয়ার সাথে সাথে আপনার সঠিক ছিল, এবং এটির উত্তরটি হওয়া উচিত - তবে কেবল .Replace()ডাটাবেস থেকে আসা মানটি করতে বলুন - কোনও প্রয়োজন নেই অভিনব ফাংশন: valueAsString = valueAsString.Replace("\\r\\n", "\r\n"); রিটার্ন কী ব্যবহার করে প্রবেশ করা যে কোনও মানই খুব ভাল করে ডিবিতে লেখা হবে - আপনি যখন উল্লেখ করেছেন যে সি # যদি সমস্যাটি সৃষ্টি হয় তার মানটি প্রদর্শন করার জন্য এটি ধরে রাখে। সুতরাং এটি পাঠ্যের অনলোড বোঝা প্রয়োজন।
vapcguy

10

অন্য সব ব্যর্থ হলে আপনি এটি ব্যবহার করতে পারেন

"My text needs a line break here" + System.Environment.NewLine + " This should be a new line"

8
<TextBlock Margin="4" TextWrapping="Wrap" FontFamily="Verdana" FontSize="12">
        <Run TextDecorations="StrikeThrough"> Run cannot contain inline</Run>
        <Span FontSize="16"> Span can contain Run or Span or whatever 
            <LineBreak />
        <Bold FontSize="22" FontFamily="Times New Roman" >Bold can contains 
            <Italic>Italic</Italic></Bold></Span>
</TextBlock>

1

সিস্টেম.ইএনভায়রনমেন্ট.নিউলাইন ব্যবহার করা আমার পক্ষে একমাত্র সমাধান। আমি যখন tried r \ n চেষ্টা করেছি, এটি কেবল পাঠ্য বাক্সে প্রকৃত \ r \ n পুনরাবৃত্তি করেছে।


0

আপনাকে নিশ্চিত করতে হবে যে পাঠ্যবন্ধটি এই বিকল্পটি সক্ষম করেছে:

AcceptsReturn="True"

অ্যাকসেপ্টস রিটারন কেবল টেক্সটবক্সের জন্য, টেক্সটব্লক নয়
স্টিভ

0

রিচটেক্সটবক্স "আরটিবি" এর মতো একটি "লাইন ব্রেক" বা "অনুচ্ছেদ বিরতি" প্রবেশ করুন:

var range = new TextRange(rtb.SelectionStart, rtb.Selection.End); 
range.Start.Paragraph.ContentStart.InsertLineBreak();
range.Start.Paragraph.ContentStart.InsertParagraphBreak();

নিউলাইন আইটেমগুলি পাওয়ার একমাত্র উপায় হ'ল প্রথমে "\ r \ n" আইটেম সহ পাঠ্য সন্নিবেশ করা এবং তারপরে আরও কোড প্রয়োগ করা যা নির্বাচন এবং / অথবা টেক্সটরেঞ্জ অবজেক্টে কাজ করে। এটি নিশ্চিত করে যে \ পার্ট আইটেমগুলি \ লাইন আইটেমগুলিতে রূপান্তরিত হয়েছে, পছন্দসই সংরক্ষণ করা হয়েছে এবং * .Rtf ফাইলটি পুনরায় খোলার সময় এখনও সঠিক correct এটাই আমি চেষ্টা করেছি এতদূর চেষ্টা করেও। টেক্সটপয়েন্টার আইটেমগুলি (.স্টার্ট .আর। কনটেন্টস্টার্ট। কনটেন্টইন্ড) সেট করতে আমার তিনটি কোড লাইন আরও কোড (চারপাশে) দ্বারা বেষ্টিত হওয়া দরকার যেখানে লাইনস এবং ব্রেকগুলি যেতে হবে, যা আমি আমার উদ্দেশ্যে সাফল্যের সাথে করেছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.