11 Stimmen

WPF Label passt FontSize an seine Breite und Höhe an

Ich muss eine Label Kontrolle in WPF an. .NET 3.5 y VisualStudio 2010 , in dem die FontSize sorgt dafür, dass der Text automatisch den Kontrollbereich ausfüllt.

Ich weiß nicht, ob ich eine CustomControl geerbt von Label oder ob ich eine UserControl die eine Label Kontrolle.

Ich habe hier ein Beispiel gesehen, das eine ValueConverter aber ich verstehe sein Verhalten hier nicht: Schriftgröße dynamisch ändern .

Kann mir jemand einen Hinweis darauf geben?

Aktualisierung:

Ich habe die Lösung gefunden, indem ich die DoubleConverter aus dem Beispiel, das ich zuvor gepostet habe:

Das Ziel ist die Verwendung eines ValueConverter die ich aus dem Beispiel extrahiert, aber den IFormatProvider NumerFormat hinzugefügt habe, um den Wert "0.1" korrekt zu analysieren, habe ich festgestellt, dass bei Dezimal 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();
  }
 }

Dann müssen Sie in XAML die Instanziierung der DoubleConverter und geben Sie die Bindung in der Datei FonSize Eigentum:

<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>

Ein wichtiger Punkt ist, dass der Wert für ConverterParameter hängt unbedingt von der zugewiesenen Schriftart ab. Jede Schriftart kann einen anderen Wert benötigen, und Sie müssen "herumspielen", um den richtigen Wert zu finden, der genau passt.

33voto

Alex Maker Punkte 1500
<Viewbox>
    <TextBlock>asd</TextBlock>
</Viewbox>

Erfüllt auch diese Aufgabe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X