如何最好地使用动态文本调整XAML的大小

时间:2009-07-10 13:15:15

标签: silverlight xaml dynamic resize

在我正在处理的Silverlight界面中,我需要在其容器调整大小时调整堆栈面板的大小,以防止其中的文本被截断。有问题的文本在运行时从语言文件中添加,具体取决于用户选择的语言。由于不同语言之间的字符串长度差异很大,我对如何最好地处理这个问题感到有点困惑。这就是它的样子。

alt text

有问题的堆栈面板是彩色块,标签Driving,Active Work,Availability和Break是长度可以改变的字符串。 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的情况下导出面板将采用的宽度?如果我能做到这一点,它将使这项任务更容易。

1 个答案:

答案 0 :(得分:3)

我不确定我是否完全理解你的问题。

您的顶级父级堆栈面板是否已被赋予 x 宽的限制,但是由于标签的长度,它的孩子要求总宽度大于此?< / p>

在这种情况下,请查看在ViewBox控件中包装标签(您可以在Silverlight工具箱library中找到它)此控件将缩放其内容以占用可用的大小。

相关问题