WPF TextBlock cambia el tamaño de la fuente para llenar el espacio disponible en una Grilla
fonts resize (6)
Bueno, no es una respuesta "perfecta", pero este es un truco rápido (puedes poner esto en kaxaml y probarlo):
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid Height="300" Background="green">
<Viewbox>
<TextBlock Background="red" Text="Hurr"/>
</Viewbox>
</Grid>
</Page>
ViewBox
cualquier contenido para llenar su contenedor. El problema es que TextBlock
, aunque tiene el mismo tamaño que el texto, tiene un relleno en la parte superior e inferior del que no puedes deshacerte (sin levantar objetos pesados). Esto podría acercarlo más a lo que desea, aunque.
Tengo un texto que se muestra en tiempo de ejecución en un bloque de texto. Quiero que el tamaño de la fuente sea lo más grande posible para llenar el área que se le da. Creo que tengo la configuración del bloque de texto correctamente para "autosize" y trato de aumentar el tamaño de la fuente hasta que el bloque de texto sea más grande que su padre, luego disminuyo el tamaño de la fuente en 1. El problema es que no puedo obtener el control para volver a dibujar recalcular su tamaño
¿Es la mejor manera de hacer eso? ¿O hay alguna manera de hacer que mi método funcione?
El control WPF ViewBox
puede crecer / reducirse con su contenido al espacio disponible.
Simplemente coloque su TextBlock
dentro de un ViewBox
como;
<Viewbox Stretch="Uniform" Width="50" Height="50">
<TextBlock Text="Test" />
</Viewbox>
ViewBox
generalmente se escala por su contenedor.
Encontré una excelente manera de hacer esto usando ViewBox
:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Viewbox Grid.Row="0" Grid.Column="0" Stretch="Uniform">
<TextBlock Name="tbTest" Background="Yellow" Text="This is some text" />
</Viewbox>
<ContentControl Grid.Column="0" Grid.Row="2">
<TextBlock>This is some text</TextBlock>
</ContentControl>
</Grid>
Para garantizar el ajuste, debe establecer MaxWidth
y / o MaxHeight
del TextBlock
<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
<TextBlock MaxWidth="500" TextWrapping="Wrap" FontSize="30" VerticalAlignment="Center"
Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."/>
Yo tuve el mismo problema. Puede usar esto para cambiar el tamaño del tamaño de fuente del bloque de texto para llenar el área cuando se haya desbordado .
<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
<TextBlock Text="{Binding Path=Title}" HorizontalAlignment="Center"/>
</Viewbox>
Envuelva el TextBlock
dentro de un ViewBox
:
<Grid>
<Viewbox>
<TextBlock TextWrapping="Wrap" Text="Some Text" />
</Viewbox>
</Grid>