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.

Eh bien j'ai enfin arrêter de cette façon et utilisés: <Viewblock> <TextBlock/> <ViewBlock> Tout à fait simple et efficace.
Vous devez ajouter votre solution comme une réponse et le marquer comme étant correcte.

OriginalL'auteur JoanComasFdz | 2010-07-12