WPF Étiquette adapter FontSize à la Largeur et la Hauteur
J'ai besoin de développer un Label
de contrôle dans WPF, sur .NET 3.5 et VisualStudio 2010, dans lequel le FontSize
fera automatiquement le remplissage du texte de la zone de contrôle.
Je ne sais pas si je dois créer un CustomControl
héritant de Label
ou si je doit créer un UserControl
qui contient un Label
de contrôle.
J'ai vu un exemple ici à l'aide d'un ValueConverter
, mais je ne suis pas la compréhension de son comportement, ici: changer la taille de police de manière dynamique.
Quelqu'un peut me donner un indice?
Mise à jour:
J'ai trouvé la solutiion à l'aide de la DoubleConverter
à partir de l'exemple que j'ai posté avant:
La soultion est à l'aide d'un ValueConverter
, dont j'ai extrait de l'exemple, mais a ajouté la NumerFormat IFormatProvider à analyser correctement les "0.1" de la valeur, j'ai trouvé qu'au Décimal d1 = Décimal.Analyser("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();
}
}
Ensuite, vous devez instancier dans le code XAML de la DoubleConverter
, et de spécifier la liaison dans le FonSize
Propriété:
<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 assignée. Chaque police peuvent avoir besoin d'une valeur différente et vous avez à "jouer" pour obtenir la valeur correcte pour l'adapter exactement.
Vous devez ajouter votre solution comme une réponse et le marquer comme étant correcte.
OriginalL'auteur JoanComasFdz | 2010-07-12
Vous devez vous connecter pour publier un commentaire.
Également fait le travail.
Alors que la viewbox astuce fonctionne, il redimensionne également déjà rendu de texte, ce qui peut ne pas être aussi forte que si elle était effectivement rendu à la taille appropriée.
Je ne pense pas que c'est la façon dont la viewbox œuvres. Il n'est pas redimensionnée déjà rendu du contenu, il applique des transformations qui sont utilisés lorsque le contenu est rendu. Au moins j'espère qu'il le fasse, parce que c'est une partie de WPF est rendu concept.
Je suis corrigé!
OriginalL'auteur Alex Maker