español controles app wpf xaml

wpf - controles - TextBlock TextWrapping no envuelve



xaml pdf español (4)

Es porque estás usando la orientación horizontal en el StackPanel. Eso significa que el StackPanel le da ancho completo a cada control secundario, y luego los coloca horizontalmente, incluso si eso significa exceder su ancho limitado / visible. Como no hay nada que restrinja el ancho del TextBlock, no se ajusta.

Si cambias a orientación vertical, entonces la envoltura funciona, pero supongo que hay una razón para que especifiques lo contrario. ¿Puedes mostrar qué diseño estás tratando de lograr?

Cuando coloco un TextBlock dentro de un StackPanel horizontalmente alineado, no se ajusta. Me doy cuenta de que esto se debe a que el ancho disponible de StackPanel es PositiveInfinity, pero ¿hay alguna solución alternativa?

Mi diseño es mucho más complicado que este ejemplo, por lo que no puedo quitar el StackPanel ni la orientación horizontal. Intenté reproducir el ejemplo más simple posible que muestra el comportamiento.

<StackPanel Orientation="Horizontal"> <Rectangle Width="50" Height="50" Fill="Blue" VerticalAlignment="Top" /> <Rectangle Width="50" Height="50" Fill="Red" VerticalAlignment="Top" /> <TextBlock TextWrapping="Wrap" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus leo lectus, viverra ut lobortis vel, mollis eget lectus. Suspendisse laoreet consequat ultrices. Curabitur ultricies, tortor feugiat porttitor faucibus, lorem eros pretium nisl, eu ullamcorper mauris tortor sit amet augue." /> </StackPanel>

Actualización: El ancho del TextBlock debe ser dinámico. Necesito que fluya con la ventana a medida que se redimensiona.

Actualización 2: se agregó otro elemento al StackPanel porque necesito que los niños se expongan horizontalmente.

Actualización 3 (Solución): se reemplazó el StackPanel con un DockPanel.

<DockPanel> <DockPanel DockPanel.Dock="Top"> <Rectangle Width="50" Height="50" Fill="Blue" VerticalAlignment="Top" DockPanel.Dock="Left" /> <Rectangle Width="50" Height="50" Fill="Red" VerticalAlignment="Top" DockPanel.Dock="Left" /> <TextBlock TextWrapping="Wrap" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus leo lectus, viverra ut lobortis vel, mollis eget lectus. Suspendisse laoreet consequat ultrices. Curabitur ultricies, tortor feugiat porttitor faucibus, lorem eros pretium nisl, eu ullamcorper mauris tortor sit amet augue." /> </DockPanel> </DockPanel>


Puede usar una cuadrícula en lugar de StackPanel (que, como se explicó, no restringe su contenido). Una cuadrícula permite mucho más control sobre el diseño de los elementos que un StackPanel y si la imagen se contrae, la columna ''auto'' tendrá un ancho de 0.

<DockPanel> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Rectangle Width="50" Height="50" Fill="Blue" VerticalAlignment="Top" /> <TextBlock TextWrapping="Wrap" Grid.Column="1" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus leo lectus, viverra ut lobortis vel, mollis eget lectus. Suspendisse laoreet consequat ultrices. Curabitur ultricies, tortor feugiat porttitor faucibus, lorem eros pretium nisl, eu ullamcorper mauris tortor sit amet augue." /> </Grid> </DockPanel>


Si fueras como yo y me pregunto por qué el Textblock aún no se ajusta después de definir un ancho.

Intente agregar un MaxWidth al Textblock con el mismo valor que Ancho,

Esto evita que el control crezca en Ancho una vez que la aplicación ha comenzado.

¡Espero que esto ayude!


Tengo un par de soluciones para este problema.

1) ancho del elemento principal vinculante al ancho del bloque de texto. (En el siguiente caso consideré usercontrol como principal).

<UserControl x:Class="WpfApplication1.MyWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" Name="userctrl"> <DockPanel> <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" HorizontalAlignment="Left" > <TextBlock TextWrapping="Wrap" MaxWidth="{Binding ElementName=userctrl,Path=ActualWidth}" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus leo lectus, viverra ut lobortis vel, mollis eget lectus. Suspendisse laoreet consequat ultrices. Curabitur ultricies, tortor feugiat porttitor faucibus, lorem eros pretium nisl, eu ullamcorper mauris tortor sit amet augue." /> </StackPanel> </DockPanel> </UserControl>

2) otra solución es el uso de Grid en lugar de stackpanel

<UserControl x:Class="WpfApplication1.MyWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" Name="userctrl"> <DockPanel> <Grid DockPanel.Dock="Top" HorizontalAlignment="Left" > <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock TextWrapping="Wrap" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus leo lectus, viverra ut lobortis vel, mollis eget lectus. Suspendisse laoreet consequat ultrices. Curabitur ultricies, tortor feugiat porttitor faucibus, lorem eros pretium nisl, eu ullamcorper mauris tortor sit amet augue." /> <TextBlock TextWrapping="Wrap" Grid.Column="1" Margin="20 0 0 0" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus leo lectus, viverra ut lobortis vel, mollis eget lectus. Suspendisse laoreet consequat ultrices. Curabitur ultricies, tortor feugiat porttitor faucibus, lorem eros pretium nisl, eu ullamcorper mauris tortor sit amet augue." /> </Grid> </DockPanel> </UserControl>