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.