2009-10-17 24 views
16

Esto debería ser tan simple - He estado golpeando mi cabeza contra mi escritorio durante tanto tiempo tratando de hacer una obra tarea sencilla seemlingly (me hace sentir como WPF es anti-intuitivo o con errores) ...WPF - ¿Cómo alinear correctamente un bloque de texto dentro de un panel de distribución orientado horizontalmente?

En En cualquier caso, tengo un Stackpanel que está configurado en orientación horizontal. Dentro de él tengo dos TextBlocks. Quiero que el 2º para mostrar su texto a la derecha.

¿Cómo puedo lograrlo?

Hacer todo esto me recuerda por qué me alejé de Silverlight. : p

Respuesta

2

En vista de sus comentarios, aquí hay otro ejemplo que muestra un par de formas de lograr lo que desea, diseño de cuadrícula y diseño de DockPanel. Por lo que dice, el diseño de DockPanel es probablemente lo que estás buscando. Si esto no funciona, es posible que deba proporcionar una descripción más clara de su diseño y propiedades deseados.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<Grid> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="0.45*" /> 
    <RowDefinition Height="0.05*" /> 
    <RowDefinition Height="0.45*" /> 
    </Grid.RowDefinitions> 
    <Grid Grid.Row="0"> 
     <Grid.ColumnDefinitions> 
     <!-- note: you don't need to declare ColumnDefintion 
     widths here; added for clarity. --> 
     <ColumnDefinition Width="0.5*" /> 
     <ColumnDefinition Width="0.5*" /> 
     </Grid.ColumnDefinitions> 
     <TextBlock 
      Grid.Column="0" 
      Background="Tomato" 
      TextWrapping="Wrap">I'm on the left</TextBlock> 
     <TextBlock 
      Grid.Column="1" 
      Background="Yellow" 
      TextAlignment="Right" 
      TextWrapping="Wrap">I'm on the right</TextBlock> 
    </Grid> 

    <Grid Grid.Row="1" Background="Gray" /> 

    <DockPanel Grid.Row="2"> 
     <TextBlock 
      DockPanel.Dock="Left" 
      Background="Tomato" 
      TextWrapping="Wrap">I'm on the left</TextBlock> 
     <TextBlock 
      DockPanel.Dock="Right" 
      Background="Yellow" 
      TextAlignment="Right" 
      TextWrapping="Wrap">I'm on the right</TextBlock> 
    </DockPanel> 
</Grid> 
</Page> 
+0

¿Hay alguna forma de hacerlo sin definir explícitamente el ancho? Me gustaría que la forma se pueda estirar para llenar cualquier área. Eso es parte del problema que he tenido - no hay manera de que encuentre decir "Ancho = 100%" – bugfixr

+0

Dado que su StackPanel tiene una orientación horizontal, los TextBlocks simplemente se mantienen apilados, bueno, horizontalmente. Sin un ancho, TextBlock se ajustará a su contenido. Un par de consideraciones: elimine el ancho de TextBlock y configure StackPanel en una Orientación = "Vertical" y cada TextBlock ahora ocupará el 100% del ancho disponible de StackPanel. O bien, puede intentar experimentar con un diseño de cuadrícula. Sin saber exactamente lo que quiere para su diseño, es un juego de adivinanzas. –

+1

Estoy de acuerdo en que probablemente quiera algo más que un StackPanel (por el motivo que das), pero por el diseño simple del que habla, sugeriría un DockPanel en lugar de una Grid. – itowlson

24

Es necesario utilizar un DockPanel si no desea que todos los elementos para ser apiladas como StackPanel haces. Para hacer que el segundo TextBlock de alineación derecha, se puede añadir una TextBlock ficticio adicional para rellenar el área entre ellos:

<DockPanel> 
     <TextBlock>Left text</TextBlock> 
     <TextBlock DockPanel.Dock="Right">Right text</TextBlock> 
     <TextBlock /> 
    </DockPanel> 

O puede utilizar el TextAlignment atributo:

<DockPanel> 
     <TextBlock>Left text</TextBlock> 
     <TextBlock TextAlignment="Right">Right text</TextBlock> 
    </DockPanel> 
+0

¡Funcionó! Gracias por su tiempo y esfuerzo :) –

1

Se puede archivar muy fácilmente mediante el uso de la cuadrícula ya que tengo el mismo problema :)

<Grid> 
    <TextBlock>Left text</TextBlock> 
    <TextBlock TextAlignment="Right">Right text</TextBlock> 
</Grid> 
Cuestiones relacionadas