Pobieram tekst z pliku XML i chciałbym wstawić kilka nowych wierszy, które są interpretowane przez renderowanie bloku tekstowego jako nowe wiersze.
Próbowałem:
<data>Foo bar baz \n baz bar</data>
Ale dane są nadal wyświetlane bez nowej linii. Ustawiłem zawartość za <data>
pośrednictwem .Text
właściwości za pośrednictwem C #.
Co muszę umieścić w XML, aby wyrenderował nowy wiersz w GUI?
Próbowałem czegoś takiego ręcznie ustawiając tekst w XAML:
<TextBlock Margin="0 15 0 0" Width="600">
There
is a new line.
</TextBlock>
I chociaż zakodowany znak nie pojawia się w GUI, to również nie daje mi nowej linii.
Odpowiedzi:
Możesz spróbować wstawić nowy wiersz w danych:
Jeśli to nie zadziała, może być konieczne ręczne przeanalizowanie ciągu.
Jeśli potrzebujesz bezpośredniego XAML, to jest proste:
źródło
XmlSerializer
przerw, zostaną one zachowane. W Xaml potrzebujesz<LineBreak/>
.Dla kompletności: Możesz również zrobić to:
x0A to szesnastkowy znak nowej linii ze zmianą znaczenia. Odpowiednik \ n
źródło
Możesz także użyć oprawy
I ustaw MyText w ten sposób:
źródło
musisz użyć
Lub jeśli wolisz:
uważaj: jeśli oboje użyjesz & 10 ORAZ przejdziesz do następnej linii w tekście, będziesz mieć DWA puste linie.
szczegóły tutaj: http://msdn.microsoft.com/en-us/library/ms788746.aspx
źródło
Chociaż jest to stare pytanie, właśnie natrafiłem na problem i rozwiązałem go inaczej niż podane odpowiedzi. Może mogłoby być pomocne dla innych.
Zauważyłem, że chociaż moje pliki XML wyglądały tak:
Kiedy został wczytany do mojego kodu C #, ciąg miał podwójne ukośniki odwrotne.
Aby to naprawić, napisałem ValueConverter, aby usunąć dodatkowy ukośnik odwrotny.
źródło
TextWrapping="Wrap"
(aAcceptsReturn="True"
jeśli to byłby TextBox) w XAML na TextBlock, miałeś rację i to powinna być odpowiedź - ale po prostu powiedz, aby zrobić.Replace()
na wartości pochodzącej z bazy danych - nie ma potrzeby fantazyjna funkcja:valueAsString = valueAsString.Replace("\\r\\n", "\r\n");
każda wartość wprowadzona za pomocą klawisza Return zostanie zapisana w bazie danych w porządku - wtedy, gdy C # przechwyci ją, aby wyświetlić wartość, która powoduje problemy, jak zauważyłeś. Musiałoby to więc nazywać się ładowaniem tekstu.Jeśli wszystko inne zawiedzie, możesz również użyć
źródło
źródło
Korzystanie z System.Environment.NewLine jest jedynym rozwiązaniem, które zadziałało. Kiedy próbowałem \ r \ n, po prostu powtórzyłem rzeczywisty \ r \ nw polu tekstowym.
źródło
Musisz upewnić się, że blok tekstowy ma włączoną tę opcję:
źródło
Wstaw „podział wiersza” lub „podział akapitu” w RichTextBox „rtb” w następujący sposób:
Jedynym sposobem uzyskania elementów NewLine jest najpierw wstawienie tekstu z elementami „\ r \ n”, a następnie zastosowanie większej ilości kodu, który działa na obiektach Selection i / lub TextRange. Daje to pewność, że elementy \ par są konwertowane na elementy \ line, są zapisywane zgodnie z potrzebami i nadal są poprawne po ponownym otwarciu pliku * .Rtf. To właśnie znalazłem do tej pory po ciężkich próbach. Moje trzy linie kodu muszą być otoczone większą ilością kodu (z pętlami), aby ustawić elementy TextPointer (.Start .End .ContentStart .ContentEnd) tam, gdzie powinny znajdować się wiersze i przerwy, co zrobiłem z powodzeniem dla moich celów.
źródło