2009-07-10 71 views
1

在我正在研究的S​​ilverlight界面中,我們需要在其容器調整大小時調整堆棧面板的大小,以防止其中的文本被截斷。有問題的文本是在運行時從語言文件添加的,具體取決於用戶選擇的語言。由於字符串的長度在各種語言之間可能有很大差異,所以我很難理解如何最好地實現這一點。這就是它的樣子。如何以動態文本調整XAML的大小

alt text

有問題的堆疊面板是彩色塊和標籤駕駛,主動工作,可用性和可中斷的,其長度可以改變的字符串。 XAML目前看起來像這樣。

<StackPanel x:Name="StatusTotals" Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,5,0,5"> 
    <Border x:Name="DrivingBorder" Background="#80FF0000" BorderBrush="Black" BorderThickness="1" Opacity="1" CornerRadius="5,0,0,5" Margin="0,0,-1,0"> 
    <StackPanel Orientation="Vertical" Margin="5,1" VerticalAlignment="Center"> 
     <TextBlock Text="Driving" Tag="dttlDriving" HorizontalAlignment="Center"/> 
     <TextBlock x:Name="DrivingDuration" Text="00:00" HorizontalAlignment="Center"/> 
    </StackPanel> 
    </Border> 
    <Border x:Name="ActiveWorkBorder" Background="#8000FFFF" BorderBrush="Black" BorderThickness="1" Opacity="1" Margin="0,0,-1,0"> 
    <StackPanel Orientation="Vertical" Margin="5,1" VerticalAlignment="Center"> 
     <TextBlock Text="ActiveWork" Tag="dttlActiveWork" HorizontalAlignment="Center"/> 
     <TextBlock x:Name="ActiveWorkDuration" Text="00:00" HorizontalAlignment="Center"/> 
    </StackPanel> 
    </Border> 
    <Border x:Name="AvailabilityBorder" Background="#80FFFF00" BorderBrush="Black" BorderThickness="1" Opacity="1" Margin="0,0,-1,0"> 
    <StackPanel Orientation="Vertical" Margin="5,1" VerticalAlignment="Center"> 
     <TextBlock Text="Availability" Tag="dttlAvailability" HorizontalAlignment="Center"/> 
     <TextBlock x:Name="AvailabilityDuration" Text="00:00" HorizontalAlignment="Center"/> 
    </StackPanel> 
    </Border> 
    <Border x:Name="BreakBorder" Background="#8000FF00" BorderBrush="Black" BorderThickness="1" Opacity="1" CornerRadius="0,5,5,0"> 
    <StackPanel Orientation="Vertical" Margin="5,1" VerticalAlignment="Center"> 
     <TextBlock Text="Break" Tag="dttlBreak" HorizontalAlignment="Center"/> 
     <TextBlock x:Name="BreakDuration" Text="00:00" HorizontalAlignment="Center"/> 
    </StackPanel> 
    </Border> 
</StackPanel> 

我希望能夠減少這種面板的大小,如果它比它上面繪製的統治者,這是我想已經是動態調整寬,但想將標籤留在下面的值它們的大小是爲了便於閱讀。

什麼是最好的方法來解決這個問題?我考慮過設置標籤的FontSize屬性或使用ScaleTransform,但我不確定哪些是最好的方法。有沒有一種方法可以導出面板將採用的寬度,而不實際更改字體大小,然後測試ActualWidth?如果我能做到這一點,這將使這個任務更容易。

回答

3

我不確定我是否完全理解您的問題。

這是您的頂級父堆疊面板的情況已被給予x寬的限制,但是由於標籤的長度,它的兒童是否要求總寬度大於此值?

在這種情況下,請查看包裝在ViewBox控件中的標籤(您可以在Silverlight Toolbox library中找到它)。此控件將縮放它的內容以佔據可用的大小。

+0

很酷,這完美的訣竅。這是我Silverlight問題的一部分;只知道有什麼可用的。 – 2009-07-13 12:44:43