ho bisogno di sviluppare un controllo Label
in WPF, sulla NET 3.5 e VisualStudio 2010, in cui il FontSize
verrà automaticamente rendere il testo riempire l'area di controllo.WPF Label adattarsi FontSize alla sua larghezza e l'altezza
Non so se devo creare un CustomControl
che eredita da Label
o se devo creare un UserControl
che contiene un controllo Label
.
Ho visto un esempio qui utilizzando uno ValueConverter
, ma non sto capendo il suo comportamento, qui: change font size dynamically.
Qualcuno può darmi un indizio su questo?
Aggiornamento:
ho trovato il Solutiion utilizzando il DoubleConverter
dall'esempio che ho postato prima:
Il soultion sta usando una ValueConverter
, che ho estratto dall'esempio, ma ha aggiunto il NumerFormat IFormatProvider per analizzare in modo corretto "0.1" del valore, ho scoperto che a 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();
}
}
Poi, bisogna istanziare in XAML l'012.399., e specificare il legame nella FonSize
Proprietà:
<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 punto importante è che il valore per ConverterParameter
dipende assolutamente dal carattere assegnato. Ogni font può richiedere un valore diverso e devi "giocare" per ottenere il valore corretto per adattarsi esattamente.
Beh ho finalmente uscire in questo modo e usati: Molto semplice ed efficace. –
JoanComasFdz
È necessario aggiungere la soluzione come risposta e contrassegnarla come corretta. –