saltos salto original nueva linea data bootstrap xaml

xaml - original - salto de linea tooltip



Nueva línea en atributo de cadena (12)

Además no funciona con

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

No es gran cosa, solo necesito usar

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

en lugar.

¿Cómo puedo agregar un salto de línea al texto cuando se establece como un atributo, es decir:

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

Romperlo en el formato explotado no es una opción para mi situación particular. Lo que necesito es alguna forma de emular lo siguiente:

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


Cuando necesite hacerlo en una cadena (por ejemplo: en sus recursos), debe usar xml:space="preserve" y los códigos de caracteres xml:space="preserve" y xml:space="preserve" :

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

O nuevas líneas literales en el texto:

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

Advertencia: si escribe código como el segundo ejemplo, ha insertado una nueva línea o un retorno de carro y una nueva línea, dependiendo de los finales de línea que utilice su sistema operativo y / o el editor de texto. Por ejemplo, si escribe eso y lo confirma en git desde un sistema Linux, todo puede parecer bien, pero si alguien lo clona en Windows, git convertirá sus finales de línea en /r/n y dependiendo de para qué sea su cadena. ... podrías romper el mundo.

Solo ten en cuenta eso cuando estés preservando espacios en blanco. Si escribes algo como esto:

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

De hecho, ha agregado cuatro saltos de línea, posiblemente cuatro retornos de carro y un espacio en blanco potencialmente invisible que es invisible ...


He encontrado esto útil, pero encontré algunos errores al agregarlo a una etiqueta "Contenido = ..." en XAML.

Tenía varias líneas en el contenido, y más tarde descubrí que el contenido conservaba espacios en blanco aunque no lo especificara. Así que para evitar eso y tenerlo "ignorar" el espacio en blanco, lo implementé de esta manera.

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

Espero que esto ayude a alguien más.

(La salida es tiene las tres líneas de texto con una línea vacía entre cada una).


Me doy cuenta de que esto es una pregunta anterior, pero solo quería agregar eso

Environment.NewLine

También funciona si se hace esto a través del código.


Para aquellos que han intentado todas las respuestas a esta pregunta y aún están pensando en por qué ninguno de ellos trabaja para usted, es posible que se haya topado con una forma del problema que encontré.

Mi propiedad TextBlock.Text estaba dentro de un elemento ToolTipService.ToolTip y estaba vinculada a una propiedad de un objeto cuyos datos se extraían de un procedimiento almacenado de SQL. Ahora, los datos de esta propiedad particular dentro del procedimiento almacenado se extraían de una función SQL.

Como nada me había funcionado, abandoné mi búsqueda y creé la siguiente clase de convertidor:

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(); } }

Terminé teniendo que usar el método Enivornment.NewLine de la respuesta de @ dparker . Le pedí al convertidor que buscara cualquier representación textual posible de una nueva línea y la reemplazara con Environment.NewLine .

¡Esto funcionó!

Sin embargo, todavía estaba perplejo en cuanto a por qué ninguno de los otros métodos funcionaba con las propiedades de los datos.

Dejé un comentario en la respuesta aceptada de @BokKing :

@BobKing: esto no parece funcionar en ToolTipService.ToolTip cuando se enlaza a un campo que tiene la línea de feeds incrustada desde un punto de referencia de SQL.

Él respondió con:

@CodeMaverick Si está enlazando a un texto con las nuevas líneas incrustadas, probablemente deberían ser valores reales de 10 caracteres (o 13) y no los centinelas XML. Esto es solo si desea escribir nuevas líneas literales en archivos XAML.

Se encendió una bombilla!

Entré en mi función SQL, reemplacé mis representaciones textuales de nuevas líneas con ...

CHAR( 13 ) + CHAR( 10 )

... eliminé el convertidor de mi enlace TextBlock.Text , y así ... ¡funcionó!


Puede ser que puedas usar el atributo xml: space = "preserve" para preservar los espacios en blanco en la fuente XAML

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


Solo necesita eliminar <TextBlock.Text> y simplemente agregar su contenido de la siguiente manera:

<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>


Tal vez alguien prefiere

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

con xmlns:s="clr-namespace:System;assembly=mscorlib" .


Tenga en cuenta que para hacer esto necesita hacerlo en el atributo Texto, no puede usar el contenido como

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


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

Puede usar cualquier valor codificado hexadecimalmente para representar un literal. En este caso, utilicé el salto de línea (char 10). Si quiere hacer vbCrLf "clásico", entonces puede usar &#x0d;&#x0a;

Por cierto, tenga en cuenta la sintaxis: es el símbolo, una libra, la letra x , luego el valor hexadecimal del carácter que desea y, finalmente, un punto y coma.

TAMBIÉN: Para completar, puede enlazar a un texto que ya tiene incorporadas las líneas de alimentación como una constante en su código anterior, o una variable construida en tiempo de ejecución.


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

no es importante saberlo, pero lo que especifique entre las etiquetas TextBlock se llama contenido en línea y entra en la propiedad TextBlock.Inlines, que es una colección Inline y contiene elementos de tipo Inline. Las subclases de Inline son Run y ​​LineBreak, entre otras. ver TextBlock.Inlines


<TextBox Name="myTextBox" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" />