WPF / XAML - 文本可以自动调整大小吗?

时间:2010-01-02 04:42:26

标签: wpf silverlight xaml graphics fonts

对于固定大小的可装订文本区域,有没有办法根据文本量使字体大小尽可能大?

例如,如果您的500x500区域的文本为“Hello”,则字体大小会非常大。但是如果你有一段文字,那么字体大小就会更小,以适应这个区域。

我查看了Viewbox但看不到它可以使用可压缩文本。

任何可以执行此操作的xaml或代码都会有所帮助(不一定是特定控件)。

1 个答案:

答案 0 :(得分:3)

你所问的比听起来更复杂,但我会给你一个想法:

<DockPanel x:Name="LayoutRoot">
    <TextBox x:Name="text" Text="this is some text and some more text I don't see any problems..." DockPanel.Dock="Top" TextChanged="text_TextChanged"/>
    <TextBlock DockPanel.Dock="Top" Text="{Binding ElementName=tb, Path=FontSize}"/>
    <Border Name="bd" BorderBrush="Black" BorderThickness="1">
        <TextBlock Name="tb" Text="{Binding ElementName=text, Path=Text}" TextWrapping="Wrap"/>
    </Border>
</DockPanel>

在代码背后:

public MainWindow()
{
    this.InitializeComponent();
    RecalcFontSize();
    tb.SizeChanged += new SizeChangedEventHandler(tb_SizeChanged);
}

void tb_SizeChanged(object sender, SizeChangedEventArgs e)
{
    RecalcFontSize();
}

private void RecalcFontSize()
{
    if (tb == null) return;
    Size constraint = new Size(tb.ActualWidth, tb.ActualHeight);
    tb.Measure(constraint);
    while (tb.DesiredSize.Height < tb.ActualHeight)
    {
        tb.FontSize += 1;
        tb.Measure(constraint);
    }
    tb.FontSize -= 1;
}

private void text_TextChanged(object sender, TextChangedEventArgs e)
{
    RecalcFontSize();
}

试一试,拖动它,改变文字......