2009-04-09 113 views
16

我有一個用戶控件(下面),我將文本綁定到數據源並實例化了一堆usercontrols。您如何讓Silverlight調整文本內容的大小以適應?

我希望文本的大小盡可能大,仍然適合控件的邊界。在Windows編程中,我可以測量減小字體大小的文本大小,直到它符合目標尺寸。

有什麼辦法可以在Silverlight中做到這一點?

我知道我大概可以做一個類似的方式,但是否有這樣做的任何「更好」的方式?

<Grid x:Name="gdBubble" Width="180" Height="95"> 
    <Ellipse x:Name="elBubble" Fill="#FFFFA300" /> 
    <TextBlock x:Name="txtContent" Text="{ Binding ClientName }" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
</Grid> 

[我在這裏正確使用網格爲了使文本塊到中心。]

答案是爲豐富的描述使用視框。

這是獲勝的配置(對我來說):

<Grid x:Name="gdBubble" Width="180" Height="95"> 
    <Ellipse x:Name="elBubble" Fill="#FFFFA300" /> 
    <controls:Viewbox Margin="10,10,10,10" VerticalAlignment="Stretch" Height="Auto"> 
     <TextBlock x:Name="txtContent" FontSize="18" Text="{ Binding ClientName }" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
    </controls:Viewbox> 
</Grid> 
+2

我真的很驚訝沒有發現其他人有這個問題。當然,任何綁定到包含文本的動態數據源的數據都有這個問題?文本塊是否僅用於自定義按鈕? – 2009-04-09 16:24:09

回答

21

昨天有人提出了一個類似的問題,關於自動調整內容的大小與容器的大小有關。這種情況下的答案是相同的:使用Viewbox。如果將TextBlock放入Viewbox中,TextBlock將自行調整大小以僅使用它所需的空間,而Viewbox將把它伸縮到容器的尺寸。使用stretch屬性從四種拉伸方法中選擇一種。

看看這個線程從昨天:

WPF Gui that changes size with window?

0

嘗試Dockpanel,而不是一個網格。使用LastChildFill = true應該讓你找到你想要的行爲。

+0

我在TextBlock填充橢圓頂部的所有可用空間之後,使用DockPanel將劃分兩者之間的可用區域。 – 2009-04-09 16:07:06

+0

除了DockPanel,即使TextBlock的尺寸擴大,也不會將字體的大小擴大到可用空間的最大允許範圍。 我懷疑它會很難做... – 2009-04-09 16:17:55

+0

如果您將橢圓停靠在DockPanel的頂部,那麼它不應該改變大小。然而,瓊的文字大小不變的觀點仍然存在。 – 2009-04-09 21:38:36

0

你看着變換ScaleTransform?

ib。

相關問題