Necesito desarrollar un control Label
en WPF, en .NET 3.5 y VisualStudio 2010, en la que el FontSize
automáticamente hará que el texto llenar el área de control.WPF Etiqueta adaptarse Tamaño de Letra a su anchura y altura
No sé si debería crear un CustomControl
heredando de Label
o si debería crear un UserControl
que contiene un control Label
.
He visto un ejemplo aquí utilizando un ValueConverter
, pero no estoy entendiendo su comportamiento, aquí: change font size dynamically.
¿Alguien puede darme una pista al respecto?
Actualización:
He encontrado el Solutiion utilizando el DoubleConverter
del ejemplo que he publicado antes:
El soultion utiliza una ValueConverter
, que extraje del ejemplo, pero agregó que el NumerFormat IFormatProvider analizar correctamente "0.1" el valor, me encontré con que en Decimal d1 = Decimal.Parse("0.1"); // = 1?!?:
[ValueConversion(typeof(object), typeof(double))]
public class DoubleConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
double dblValue = (double)value;
double scale = Double.Parse(((string)parameter), System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
return dblValue * scale;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Entonces, usted tiene que crear una instancia en XAML el DoubleConverter
, y especifique la unión en FonSize
propiedad:
<UserControl x:Class="<Namespace>.LabelAutoFontSize"
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"
xmlns:me="clr-namespace:<Namespace>"
mc:Ignorable="d"
d:DesignHeight="60" d:DesignWidth="278">
<UserControl.Resources>
<me:DoubleConverter x:Key="doubleConverter" />
</UserControl.Resources>
<Grid>
<Label
x:Name="lbl"
FontSize="{
Binding Path=Width,
RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
Converter={StaticResource doubleConverter},
ConverterParameter=0.116}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Content="LabelAutoFontSize"
d:LayoutOverrides="Width"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center" />
</Grid>
</UserControl>
Un punto importante es que el valor de ConverterParameter
depende absolutamente de la fuente asignada. Cada fuente puede necesitar un valor diferente y debe "jugar" para obtener el valor correcto que se ajuste exactamente.
Bueno por fin dejar de esta manera y utilizada: Muy sencillo y eficaz. –
JoanComasFdz
Debe agregar su solución como respuesta y marcarla como correcta. –