Je dois développer un contrôle Label
dans WPF, sur .NET 3.5 et VisualStudio 2010, dans lequel le FontSize
fera automatiquement le texte de remplir la zone de contrôle.WPF Étiquette adapter FontSize à sa largeur et la hauteur
Je ne sais pas si je devrais créer un CustomControl
héritant de Label
ou si je dois créer un UserControl
qui contient un contrôle Label
. J'ai vu un exemple ici en utilisant un ValueConverter
, mais je ne comprends pas son comportement, ici: change font size dynamically.
Quelqu'un peut-il me donner une idée à ce sujet?
Mise à jour:
J'ai trouvé le solutiion en utilisant le DoubleConverter
de l'exemple que j'ai posté avant:
Le soultion utilise un ValueConverter
, que j'extrait de l'exemple, mais il a ajouté le NumerFormat IFormatProvider pour analyser correctement la valeur « 0.1 », je trouve que, à 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();
}
}
, vous devez ensuite instancier en XAML le DoubleConverter
, et préciser la liaison dans la propriété FonSize
:
<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 point important est que la valeur de ConverterParameter
dépend absolument de la police affectée. Chaque police peut avoir besoin d'une valeur différente et vous devez "jouer" pour obtenir la valeur correcte pour s'adapter exactement.
Eh bien, je enfin quitter cette façon et utilisé: est très simple et efficace. –
JoanComasFdz
Vous devez ajouter votre solution comme réponse et la marquer comme correcte. –