WPF标签使FontSize适应它的宽度和高度

时间:2010-07-12 14:11:32

标签: wpf label width font-size

我需要在 WPF .NET 3.5 VisualStudio 2010 中开发Label控件,其中{ {1}}将自动使文本填充控制区域。

我不知道是否应该创建FontSize继承自CustomControl,或者我是否应创建包含Label控件的UserControl

我在这里看到了一个使用Label的示例,但我不理解它的行为,在这里:change font size dynamically

有谁可以给​​我一个线索?

更新:

我使用之前发布的示例中的ValueConverter找到了解决方案:

灵魂使用DoubleConverter,我从示例中提取,但添加了NumerFormat IFormatProvider以正确解析“0.1”值,我发现在Decimal d1 = Decimal.Parse("0.1"); // = 1?!?

ValueConverter

然后,您必须在XAML中实例化 [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(); } } ,并在DoubleConverter属性中指定绑定:

FonSize

重要的一点是<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> 的值完全取决于分配的字体。每种字体可能需要不同的值,您必须“玩”才能获得正确的值才能正确拟合。

1 个答案:

答案 0 :(得分:27)

<Viewbox>
    <TextBlock>asd</TextBlock>
</Viewbox>

也是这份工作。