2011-11-15 13 views
32

Dado un bloque de texto con formato en Windows Phone 7.1 del proyecto:TextBlock con múltiples <Run> separación

<StackPanel Orientation="Horizontal"> 
    <TextBlock Foreground="DarkGray" VerticalAlignment="Bottom" Margin="0,0,0,8"> 
      <Run Text="total length "/> 
      <Run Text="{Binding TotalHours}" FontSize="48"/> 
      <Run Text="h "/> 
      <Run Text=":" FontSize="48"/> 
      <Run Text="{Binding TotalMinutes}" FontSize="48"/> 
      <Run Text="m "/> 
    </TextBlock> 
</StackPanel> 

Se obtiene una vista previa correctamente en VS diseñador:

vs text block

Está ya no la miraba camino que quiero en la mezcla:

blend text block

Se ve igual que en Blend (buen equipo de mezcla de trabajo) en el emulador y en un dispositivo real.

¿Qué agrega esos espacios antes y después de los grandes 8 y 45?

¿Cómo puedo forzar que mi diseño se vea correctamente (como en el diseñador de VS)?

Respuesta

53

si escribe todos sus Runs en la misma línea, el espacio vacío desaparecerá. Básicamente, una nueva línea aquí es un espacio vacío en la interfaz de usuario.

<TextBlock Foreground="DarkGray" VerticalAlignment="Bottom" Margin="0,0,0,8"><Run Text="total length "/><Run Text="{Binding TotalHours}" FontSize="48"/><Run Text="h "/><Run Text=":" FontSize="48"/><Run Text="{Binding TotalMinutes}" FontSize="48"/><Run Text="m "/></TextBlock> 

enter image description here

+3

gran respuesta. Como en serio, obtuvimos esas Runs que son elementos secundarios de TextBlock, ¿por qué importa cómo se muestra TextBlock si colocamos o no espacios en blanco entre ellos? ¿Y por qué las líneas nuevas + muchos espacios se interpretan como espacio único? –

+3

@ValentinKuzub Porque puede ingresar texto sin formato entre las ejecuciones y se representará. El colapso de espacios en blanco consecutivos (pestañas, entradas) en un solo espacio es un comportamiento común de XML que la mayoría de nosotros ya conocemos en HTML. –

+2

sí, como si ese fuera un gran ejemplo de HTML de grandeza sobre XML? Permitir mezclar texto entre Ejecuciones, Ejecuciones y tratar espacios en blanco con manejo de casos especiales no es algo bueno y una elección extraña. Su problema de intercambio y la causa. El problema es el tratamiento extraño de los elementos XML hijos de TextBlock. Incluye un extraño tratamiento de espacio en blanco y texto extraño entre el tratamiento de elementos. –

9

Para construir fuera de la respuesta de Justin XL, la parte importante es que no se puede tener espacios en blanco entre las etiquetas de correr, pero los espacios en blanco en las etiquetas mismos does't importa ...

por lo que puede ser creativo para colocar carreras en líneas separadas, pero no añadir espacios para el resultado:

<!-- Formatted to prevent adding spaces between runs --> 
<TextBlock Foreground="DarkGray" VerticalAlignment="Bottom" Margin="0,0,0,8" 
    ><Run Text="total length " 
    /><Run Text="{Binding TotalHours}" FontSize="48" 
    /><Run Text="h " 
    /><Run Text=":" FontSize="48" 
    /><Run Text="{Binding TotalMinutes}" FontSize="48" 
    /><Run Text="m " 
/></TextBlock> 
+0

¿por qué no usar los tramos en lugar de los tramos? (¿o no son compatibles con Windows Phone?) –

+0

Creo que el problema aquí tiene más que ver con el espacio en blanco entre las etiquetas que se tratan como un espacio en lugar de un problema con las etiquetas mismas. Por lo que entiendo, un Span se usa para agregar elementos que no son de texto a un bloque de texto, donde Run es sólo para texto, por lo que dudo que usar un Span en lugar de Run corrija el problema con los espacios adicionales que se agregan. –

+0

¡Eso fue todo, gracias! – serop

Cuestiones relacionadas