3
對於固定大小的可打包文本區域,是否有任何方法可以根據文本數量儘可能地增大字體大小?WPF/XAML - 文本可以自動調整大小嗎?
例如,如果您的文字爲「Hello」的500x500區域的字體大小將非常大。但是,如果您有一段文字,字體大小將會更小以適應該區域。
我已經看過Viewbox,但看不到它可以使用可打包的文本。
任何可以做到這一點的xaml或代碼都會有所幫助(不一定是特定的控件)。
對於固定大小的可打包文本區域,是否有任何方法可以根據文本數量儘可能地增大字體大小?WPF/XAML - 文本可以自動調整大小嗎?
例如,如果您的文字爲「Hello」的500x500區域的字體大小將非常大。但是,如果您有一段文字,字體大小將會更小以適應該區域。
我已經看過Viewbox,但看不到它可以使用可打包的文本。
任何可以做到這一點的xaml或代碼都會有所幫助(不一定是特定的控件)。
什麼你問的是複雜得多,它的聲音,但我給你出個主意:
<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();
}
試試吧,拖動它周圍,改變文字...
它適用於(200,200),不幸的是它不適用於(440,330)。 如果你嘗試這個約束,你會注意到底線被截去。如果有幫助,我有一個屏幕快照和示例應用程序。 任何想法? – Lee 2010-01-02 17:30:05
我將重現它並更新帖子。 – 2010-01-02 17:44:59
立即嘗試。請注意,這僅僅是一個領導,可能有更好的方式來達到最佳字體大小,而不會增加1 ... 1 – 2010-01-02 17:59:20